diff --git a/royalgames.py b/royalgames.py
index c198b58d..b9d72c27 100644
--- a/royalgames.py
+++ b/royalgames.py
@@ -1,7 +1,7 @@
import os
import asyncio
from royalnet.bots import TelegramBot
-from royalnet.commands import PingCommand, ShipCommand, SmecdsCommand, ColorCommand, CiaoruoziCommand, SyncCommand
+from royalnet.commands import PingCommand, ShipCommand, SmecdsCommand, ColorCommand, CiaoruoziCommand, SyncCommand, DiarioCommand
from royalnet.commands.debug_create import DebugCreateCommand
from royalnet.commands.debug_author import DebugAuthorCommand
from royalnet.network import RoyalnetServer
@@ -10,7 +10,7 @@ from royalnet.database.tables import Royal, Telegram
loop = asyncio.get_event_loop()
commands = [PingCommand, ShipCommand, SmecdsCommand, ColorCommand, CiaoruoziCommand, DebugCreateCommand, SyncCommand,
- DebugAuthorCommand]
+ DebugAuthorCommand, DiarioCommand]
master = RoyalnetServer("localhost", 1234, "sas")
tg_bot = TelegramBot(os.environ["TG_AK"], "localhost:1234", "sas", commands, os.environ["DB_PATH"], Royal, Telegram, "tg_id")
diff --git a/royalnet/commands/__init__.py b/royalnet/commands/__init__.py
index 44ffda9a..edc01972 100644
--- a/royalnet/commands/__init__.py
+++ b/royalnet/commands/__init__.py
@@ -5,7 +5,8 @@ from .smecds import SmecdsCommand
from .ciaoruozi import CiaoruoziCommand
from .color import ColorCommand
from .sync import SyncCommand
+from .diario import DiarioCommand
__all__ = ["NullCommand", "PingCommand", "ShipCommand", "SmecdsCommand", "CiaoruoziCommand", "ColorCommand",
- "SyncCommand"]
+ "SyncCommand", "DiarioCommand"]
diff --git a/royalnet/commands/debug_create.py b/royalnet/commands/debug_create.py
index 940899e2..6327ca2b 100644
--- a/royalnet/commands/debug_create.py
+++ b/royalnet/commands/debug_create.py
@@ -1,5 +1,5 @@
-from ..utils import Command, CommandArgs, Call
-from ..database.tables import Royal
+from ..utils import Command, CommandArgs, Call, asyncify
+from ..database.tables import Royal, Alias
class DebugCreateCommand(Command):
@@ -7,10 +7,12 @@ class DebugCreateCommand(Command):
command_name = "debug_create"
command_title = "Create a new Royalnet user account"
- require_alchemy_tables = {Royal}
+ require_alchemy_tables = {Royal, Alias}
async def common(self, call: Call, args: CommandArgs):
royal = call.alchemy.Royal(username=args[0], role="Member")
call.session.add(royal)
- call.session.commit()
+ alias = call.alchemy.Alias(royal=royal, alias=royal.username)
+ call.session.add(alias)
+ await asyncify(call.session.commit)
await call.reply(f"✅ Utente {royal}
creato!")
diff --git a/royalnet/commands/diario.py b/royalnet/commands/diario.py
index 97f3bb6c..b25ede61 100644
--- a/royalnet/commands/diario.py
+++ b/royalnet/commands/diario.py
@@ -2,6 +2,7 @@ import re
import datetime
from ..utils import Command, CommandArgs, Call, InvalidInputError
from ..database.tables import Royal, Diario, Alias
+from ..utils import asyncify
class DiarioCommand(Command):
@@ -13,17 +14,35 @@ class DiarioCommand(Command):
async def common(self, call: Call, args: CommandArgs):
# Recreate the full sentence
- text = " ".join(args)
+ text = " ".join(args.args)
# Pass the sentence through the diario regex
- match = re.match(r'["«‘“‛‟❛❝〝"`]([^"]+)["»’”❜❞〞"`] *(?:(?:-{1,2}|—) *(\w+))?(?:,? *([^ ].*))?', text)
+ match = re.match(r'(!)? *["«‘“‛‟❛❝〝"`]([^"]+)["»’”❜❞〞"`] *(?:(?:-{1,2}|—) *([\w ]+))?(?:, *([^ ].*))?', text)
# Find the corresponding matches
if match is None:
+ await call.reply(f"✅ Comando skippato per frase non valida")
raise InvalidInputError("No match found.")
- text = match.group(1)
- quoted = match.group(2)
- context = match.group(3)
+ spoiler = bool(match.group(1))
+ text = match.group(2)
+ quoted = match.group(3)
+ context = match.group(4)
timestamp = datetime.datetime.now()
# Find if there's a Royalnet account associated with the quoted name
- quoted_alias = call.session.query(call.alchemy.Alias).filter_by(alias=quoted).one_or_none()
+ if quoted is not None:
+ quoted_alias = await asyncify(call.session.query(call.alchemy.Alias).filter_by(alias=quoted.lower()).one_or_none)
+ else:
+ quoted_alias = None
quoted_account = quoted_alias.royal if quoted_alias is not None else None
- # Find the creator of the quote
\ No newline at end of file
+ # Find the creator of the quotes
+ creator = await call.get_author()
+ # Create the diario quote
+ diario = call.alchemy.Diario(creator=creator,
+ quoted_account=quoted_account,
+ quoted=quoted,
+ text=text,
+ context=context,
+ timestamp=timestamp,
+ media_url=None,
+ spoiler=spoiler)
+ call.session.add(diario)
+ await asyncify(call.session.commit)
+ await call.reply(f"✅ Aggiunto al diario: {repr(diario)}
")
diff --git a/royalnet/database/tables/diario.py b/royalnet/database/tables/diario.py
index c3418cf9..5f91dd5c 100644
--- a/royalnet/database/tables/diario.py
+++ b/royalnet/database/tables/diario.py
@@ -13,7 +13,6 @@ class Diario:
__tablename__ = "diario"
diario_id = Column(Integer, primary_key=True)
-
creator_id = Column(Integer, ForeignKey("royals.uid"))
quoted_account_id = Column(Integer, ForeignKey("royals.uid"))
quoted = Column(String)
@@ -27,7 +26,4 @@ class Diario:
quoted_account = relationship("Royal", foreign_keys=quoted_account_id, backref="diario_quoted")
def __repr__(self):
- return f""
-
- def __str__(self):
- return f"diario:{self.diario_id}"
+ return f"<Diario diario_id={self.diario_id} creator_id={self.creator_id} quoted_account_id={self.quoted_account_id} quoted={self.quoted} text={self.text} context={self.context} timestamp={self.timestamp} media_url={self.media_url} spoiler={self.spoiler}>"