mirror of
https://github.com/RYGhub/royalnet.git
synced 2024-11-27 13:34:28 +00:00
Implement sync
This commit is contained in:
parent
7beb2fb193
commit
4656ab92a9
6 changed files with 29 additions and 12 deletions
|
@ -1,13 +1,13 @@
|
|||
import os
|
||||
import asyncio
|
||||
from royalnet.bots import TelegramBot
|
||||
from royalnet.commands import PingCommand, ShipCommand, SmecdsCommand, ColorCommand, CiaoruoziCommand
|
||||
from royalnet.commands import PingCommand, ShipCommand, SmecdsCommand, ColorCommand, CiaoruoziCommand, SyncCommand
|
||||
from royalnet.commands.debug_create import DebugCreateCommand
|
||||
from royalnet.network import RoyalnetServer
|
||||
|
||||
loop = asyncio.get_event_loop()
|
||||
|
||||
commands = [PingCommand, ShipCommand, SmecdsCommand, ColorCommand, CiaoruoziCommand, DebugCreateCommand]
|
||||
commands = [PingCommand, ShipCommand, SmecdsCommand, ColorCommand, CiaoruoziCommand, DebugCreateCommand, SyncCommand]
|
||||
|
||||
master = RoyalnetServer("localhost", 1234, "sas")
|
||||
tg_bot = TelegramBot(os.environ["TG_AK"], "localhost:1234", "sas", commands, "sqlite://")
|
||||
|
|
|
@ -4,6 +4,8 @@ from .ship import ShipCommand
|
|||
from .smecds import SmecdsCommand
|
||||
from .ciaoruozi import CiaoruoziCommand
|
||||
from .color import ColorCommand
|
||||
from .sync import SyncCommand
|
||||
|
||||
|
||||
__all__ = ["NullCommand", "PingCommand", "ShipCommand", "SmecdsCommand", "CiaoruoziCommand", "ColorCommand"]
|
||||
__all__ = ["NullCommand", "PingCommand", "ShipCommand", "SmecdsCommand", "CiaoruoziCommand", "ColorCommand",
|
||||
"SyncCommand"]
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
import typing
|
||||
from telegram import Update, User
|
||||
from ..utils import Command, CommandArgs, Call
|
||||
from ..database.tables import Royal
|
||||
from ..utils import Command, CommandArgs, Call, asyncify
|
||||
from ..database.tables import Royal, Telegram
|
||||
|
||||
|
||||
class SyncCommand(Command):
|
||||
|
@ -9,7 +9,7 @@ class SyncCommand(Command):
|
|||
command_name = "sync"
|
||||
command_title = "Connect your current account to Royalnet"
|
||||
|
||||
require_alchemy_tables = [Royal]
|
||||
require_alchemy_tables = [Royal, Telegram]
|
||||
|
||||
async def common(self, call: Call, args: CommandArgs):
|
||||
raise NotImplementedError()
|
||||
|
@ -21,6 +21,16 @@ class SyncCommand(Command):
|
|||
if user is None:
|
||||
raise ValueError("Trying to sync a None user.")
|
||||
# Find the Royal
|
||||
royal = call.session.query(call.interface_alchemy.Royal).filter_by(username=args[0]).one_or_none()
|
||||
royal = await asyncify(call.session.query(call.interface_alchemy.Royal).filter_by(username=args[0]).one_or_none)
|
||||
if royal is None:
|
||||
await call.reply("⚠️ Non esiste alcun account Royalnet con quel nome.")
|
||||
# Create a Telegram to connect to the Royal
|
||||
# Avatar is WIP
|
||||
telegram = call.interface_alchemy.Telegram(royal=royal,
|
||||
tg_id=user.id,
|
||||
tg_first_name=user.first_name,
|
||||
tg_last_name=user.last_name,
|
||||
tg_username=user.username)
|
||||
call.session.add(telegram)
|
||||
# Commit the session
|
||||
await asyncify(call.session.commit())
|
||||
|
|
|
@ -4,7 +4,7 @@ from sqlalchemy import create_engine
|
|||
from sqlalchemy.ext.declarative import declarative_base
|
||||
from sqlalchemy.orm import sessionmaker
|
||||
from contextlib import contextmanager, asynccontextmanager
|
||||
from ..utils import cdj
|
||||
from ..utils import cdj, asyncify
|
||||
|
||||
loop = asyncio.get_event_loop()
|
||||
|
||||
|
@ -41,7 +41,7 @@ class Alchemy:
|
|||
|
||||
@asynccontextmanager
|
||||
async def session_acm(self):
|
||||
session = await loop.run_in_executor(None, self.Session)
|
||||
session = await asyncify(self.Session)
|
||||
try:
|
||||
yield session
|
||||
except Exception:
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
from .royals import Royal
|
||||
from .telegram import Telegram
|
||||
|
||||
__all__ = ["Royal"]
|
||||
__all__ = ["Royal", "Telegram"]
|
||||
|
|
|
@ -2,19 +2,23 @@ from sqlalchemy import Column, \
|
|||
Integer, \
|
||||
String, \
|
||||
BigInteger, \
|
||||
LargeBinary
|
||||
LargeBinary, \
|
||||
ForeignKey
|
||||
from sqlalchemy.orm import relationship
|
||||
|
||||
|
||||
class Telegram:
|
||||
__tablename__ = "telegram"
|
||||
|
||||
royal_id = Column(Integer)
|
||||
royal_id = Column(Integer, ForeignKey("royals.uid"))
|
||||
tg_id = Column(BigInteger, primary_key=True)
|
||||
tg_first_name = Column(String)
|
||||
tg_last_name = Column(String)
|
||||
tg_username = Column(String)
|
||||
tg_avatar = Column(LargeBinary)
|
||||
|
||||
royal = relationship("Royal")
|
||||
|
||||
def __repr__(self):
|
||||
return f"<Telegram {str(self)}>"
|
||||
|
||||
|
|
Loading…
Reference in a new issue