diff --git a/.gitignore b/.gitignore
index 015ad6c0..e9a9e414 100644
--- a/.gitignore
+++ b/.gitignore
@@ -9,3 +9,4 @@ opusfiles/
ignored/
markovmodels/
logs/
+royalnet.egg-info/
diff --git a/royalgames.py b/royalgames.py
index da03bb3d..3aa357ec 100644
--- a/royalgames.py
+++ b/royalgames.py
@@ -10,7 +10,7 @@ loop = asyncio.get_event_loop()
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://")
+tg_bot = TelegramBot(os.environ["TG_AK"], "localhost:1234", "sas", commands, os.environ["DB_PATH"])
loop.create_task(master.run())
loop.create_task(tg_bot.run())
print("Starting loop...")
diff --git a/royalnet/commands/debug_create.py b/royalnet/commands/debug_create.py
index 2bb7e7dd..7e1021b0 100644
--- a/royalnet/commands/debug_create.py
+++ b/royalnet/commands/debug_create.py
@@ -13,4 +13,4 @@ class DebugCreateCommand(Command):
royal = call.interface_alchemy.Royal(username=args[0], role="Member")
call.session.add(royal)
call.session.commit()
- await call.reply(f"✅ Utente {royal} creato!")
+ await call.reply(f"✅ Utente {royal}
creato!")
diff --git a/royalnet/commands/sync.py b/royalnet/commands/sync.py
index 2aabff77..6b0d9793 100644
--- a/royalnet/commands/sync.py
+++ b/royalnet/commands/sync.py
@@ -24,13 +24,25 @@ class SyncCommand(Command):
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)
+ # Find if the user is already synced
+ telegram = await asyncify(call.session.query(call.interface_alchemy.Telegram).filter_by(tg_id=user.id).one_or_none)
+ if telegram is None:
+ # 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)
+ await call.reply(f"✅ Connessione completata: {str(royal)}
⬌ {str(telegram)}
")
+ else:
+ # Update the Telegram data
+ # Avatar is WIP
+ telegram.tg_first_name = user.first_name
+ telegram.tg_last_name = user.last_name
+ telegram.tg_username = user.username
+ await call.reply(f"✅ Dati di {str(telegram)}
aggiornati.")
# Commit the session
await asyncify(call.session.commit())
+ # Notify the user
diff --git a/royalnet/database/alchemy.py b/royalnet/database/alchemy.py
index 8dd9ba4c..43417dfd 100644
--- a/royalnet/database/alchemy.py
+++ b/royalnet/database/alchemy.py
@@ -10,7 +10,9 @@ loop = asyncio.get_event_loop()
class Alchemy:
- def __init__(self, database_uri: str = "sqlite://", tables: typing.Optional[typing.Set] = None):
+ def __init__(self, database_uri: str, tables: typing.Optional[typing.Set] = None):
+ if database_uri.startswith("sqlite"):
+ raise NotImplementedError("Support for sqlite databases is currently missing")
self.engine = create_engine(database_uri)
self.Base = declarative_base(bind=self.engine)
self.Session = sessionmaker(bind=self.engine)
diff --git a/royalnet/database/tables/royals.py b/royalnet/database/tables/royals.py
index 7d71a1ca..180720bc 100644
--- a/royalnet/database/tables/royals.py
+++ b/royalnet/database/tables/royals.py
@@ -17,4 +17,4 @@ class Royal:
return f""
def __str__(self):
- return self.username
+ return f"royalnet:{self.username}"
diff --git a/royalnet/database/tables/telegram.py b/royalnet/database/tables/telegram.py
index dec361f0..624584fa 100644
--- a/royalnet/database/tables/telegram.py
+++ b/royalnet/database/tables/telegram.py
@@ -5,6 +5,7 @@ from sqlalchemy import Column, \
LargeBinary, \
ForeignKey
from sqlalchemy.orm import relationship
+from .royals import Royal
class Telegram:
@@ -23,6 +24,9 @@ class Telegram:
return f""
def __str__(self):
+ return f"telegram:{self.mention()}"
+
+ def mention(self) -> str:
if self.tg_username is not None:
return f"@{self.tg_username}"
elif self.tg_last_name is not None: