1
Fork 0
mirror of https://github.com/RYGhub/royalnet.git synced 2024-11-27 13:34:28 +00:00

Create reminder command

This commit is contained in:
Steffo 2019-04-09 11:15:27 +02:00
parent 094a961b51
commit 12805f5bc1
5 changed files with 43 additions and 6 deletions

View file

@ -1,10 +1,8 @@
import os import os
import asyncio import asyncio
from royalnet.bots import TelegramBot from royalnet.bots import TelegramBot
from royalnet.commands import PingCommand, ShipCommand, SmecdsCommand, ColorCommand, CiaoruoziCommand, SyncCommand, DiarioCommand, RageCommand from royalnet.commands import *
from royalnet.commands.debug_create import DebugCreateCommand from royalnet.commands.debug_create import DebugCreateCommand
from royalnet.commands.author import AuthorCommand
from royalnet.commands.dateparser import DateparserCommand
from royalnet.commands.error_handler import ErrorHandlerCommand from royalnet.commands.error_handler import ErrorHandlerCommand
from royalnet.network import RoyalnetServer from royalnet.network import RoyalnetServer
from royalnet.database.tables import Royal, Telegram from royalnet.database.tables import Royal, Telegram
@ -12,7 +10,7 @@ from royalnet.database.tables import Royal, Telegram
loop = asyncio.get_event_loop() loop = asyncio.get_event_loop()
commands = [PingCommand, ShipCommand, SmecdsCommand, ColorCommand, CiaoruoziCommand, DebugCreateCommand, SyncCommand, commands = [PingCommand, ShipCommand, SmecdsCommand, ColorCommand, CiaoruoziCommand, DebugCreateCommand, SyncCommand,
AuthorCommand, DiarioCommand, RageCommand, DateparserCommand] AuthorCommand, DiarioCommand, RageCommand, DateparserCommand, ReminderCommand]
master = RoyalnetServer("localhost", 1234, "sas") master = RoyalnetServer("localhost", 1234, "sas")
tg_bot = TelegramBot(os.environ["TG_AK"], "localhost:1234", "sas", commands, os.environ["DB_PATH"], Royal, Telegram, "tg_id", error_command=ErrorHandlerCommand) tg_bot = TelegramBot(os.environ["TG_AK"], "localhost:1234", "sas", commands, os.environ["DB_PATH"], Royal, Telegram, "tg_id", error_command=ErrorHandlerCommand)

View file

@ -7,7 +7,10 @@ from .color import ColorCommand
from .sync import SyncCommand from .sync import SyncCommand
from .diario import DiarioCommand from .diario import DiarioCommand
from .rage import RageCommand from .rage import RageCommand
from .dateparser import DateparserCommand
from .author import AuthorCommand
from .reminder import ReminderCommand
__all__ = ["NullCommand", "PingCommand", "ShipCommand", "SmecdsCommand", "CiaoruoziCommand", "ColorCommand", __all__ = ["NullCommand", "PingCommand", "ShipCommand", "SmecdsCommand", "CiaoruoziCommand", "ColorCommand",
"SyncCommand", "DiarioCommand", "RageCommand"] "SyncCommand", "DiarioCommand", "RageCommand", "DateparserCommand", "AuthorCommand", "ReminderCommand"]

View file

@ -0,0 +1,27 @@
import datetime
import dateparser
import typing
from ..utils import Command, Call, sleep_until
class ReminderCommand(Command):
command_name = "reminder"
command_description = "Ripete quello che gli avevi chiesto dopo un po' di tempo."
command_syntax = "[ (data) ] (testo)"
@classmethod
async def common(cls, call: Call):
match = call.args.match(r"\[ *(.+?) *] *(.+?) *$")
date_str = match.group(1)
reminder_text = match.group(2)
date: typing.Optional[datetime.datetime]
try:
date = dateparser.parse(date_str)
except OverflowError:
date = None
if date is None:
await call.reply("⚠️ La data che hai inserito non è valida.")
await call.reply(f"✅ Promemoria impostato per [b]{date.strftime('%Y-%m-%d %H:%M:%S')}[/b]")
await sleep_until(date)
await call.reply(f"❗️ Promemoria: [b]{reminder_text}[/b]")

View file

@ -3,6 +3,7 @@ from .call import Call
from .command import Command, CommandArgs, InvalidInputError, UnsupportedError, InvalidConfigError, ExternalError from .command import Command, CommandArgs, InvalidInputError, UnsupportedError, InvalidConfigError, ExternalError
from .safeformat import safeformat from .safeformat import safeformat
from .classdictjanitor import cdj from .classdictjanitor import cdj
from .sleepuntil import sleep_until
__all__ = ["asyncify", "Call", "Command", "safeformat", "InvalidInputError", "UnsupportedError", "CommandArgs", __all__ = ["asyncify", "Call", "Command", "safeformat", "InvalidInputError", "UnsupportedError", "CommandArgs",
"cdj", "InvalidConfigError", "ExternalError"] "cdj", "InvalidConfigError", "ExternalError", "sleep_until"]

View file

@ -1,3 +1,4 @@
import re
import typing import typing
if typing.TYPE_CHECKING: if typing.TYPE_CHECKING:
from .call import Call from .call import Call
@ -35,6 +36,13 @@ class CommandArgs(list):
raise InvalidInputError(f'Tried to get invalid [{item}] slice from CommandArgs') raise InvalidInputError(f'Tried to get invalid [{item}] slice from CommandArgs')
raise ValueError(f"Invalid type passed to CommandArgs.__getattr__: {type(item)}") raise ValueError(f"Invalid type passed to CommandArgs.__getattr__: {type(item)}")
def match(self, pattern: typing.Pattern) -> typing.Match:
text = " ".join(self)
match = re.match(pattern, text)
if match is None:
raise InvalidInputError("Pattern didn't match")
return match
class Command: class Command:
"""A generic command, called from any source.""" """A generic command, called from any source."""