diff --git a/discordbot.py b/discordbot.py index 22b9fa9c..755a4e8b 100644 --- a/discordbot.py +++ b/discordbot.py @@ -243,18 +243,32 @@ async def update_users_pipe(users_connection): await client.wait_until_ready() while True: msg = await loop.run_in_executor(executor, users_connection.recv) - if msg == "/cv": + if msg == "get cv": discord_members = list(client.get_server(config["Discord"]["server_id"]).members) users_connection.send(discord_members) + elif msg.startswith("!"): + data = msg.split(" ") + if data[0] not in commands: + users_connection.send("error") + continue + await commands[data[0]](channel=client.get_channel(config["Discord"]["main_channel"]), + author=None, + params=data[1:] if len(data) > 1 else []) + users_connection.send("success") def command(func): """Decorator. Runs the function as a Discord command.""" async def new_func(channel: discord.Channel, author: discord.Member, params: typing.List[str], *args, **kwargs): - sentry.user_context({ - "discord_id": author.id, - "username": f"{author.name}#{author.discriminator}" - }) + if author is not None: + sentry.user_context({ + "discord_id": author.id, + "username": f"{author.name}#{author.discriminator}" + }) + else: + sentry.user_context({ + "source": "Telegram" + }) try: result = await func(channel=channel, author=author, params=params, *args, **kwargs) except Exception: @@ -313,6 +327,8 @@ async def cmd_ping(channel: discord.Channel, author: discord.Member, params: typ @command async def cmd_cv(channel: discord.Channel, author: discord.Member, params: typing.List[str]): + if author is None: + await client.send_message(channel, "⚠ Questo comando richiede un autore.") if author.voice.voice_channel is None: await client.send_message(channel, "⚠ Non sei in nessun canale!") return @@ -510,6 +526,21 @@ async def queue_play_next_video(): del voice_queue[0] +commands = { + "!ping": cmd_ping, + "!cv": cmd_cv, + "!play": cmd_play, + "!p": cmd_play, + "!skip": cmd_skip, + "!s": cmd_skip, + "!remove": cmd_remove, + "!queue": cmd_queue, + "!q": cmd_queue, + "!shuffle": cmd_shuffle, + "!clear": cmd_clear +} + + def process(users_connection=None): print("Discordbot starting...") if users_connection is not None: diff --git a/telegrambot.py b/telegrambot.py index df26cbbd..83cfc6d5 100644 --- a/telegrambot.py +++ b/telegrambot.py @@ -64,12 +64,12 @@ def cmd_register(bot: Bot, update: Update): def cmd_discord(bot: Bot, update: Update): if discord_connection is None: - bot.send_message(update.message.chat.id, "⚠ Il bot non è sincronizzato con Discord al momento.") + bot.send_message(update.message.chat.id, "⚠ Il bot non è collegato a Discord al momento.") return - discord_connection.send("/cv") + discord_connection.send("get cv") server_members = discord_connection.recv() - channels = {0:None} - members_in_channels = {0:[]} + channels = {0: None} + members_in_channels = {0: []} message = "" # Find all the channels for member in server_members: @@ -404,6 +404,20 @@ def cmd_profile(bot: Bot, update: Update): parse_mode="Markdown") +def cmd_bridge(bot: Bot, update: Update): + try: + data = update.message.text.split(" ", 1)[1] + except IndexError: + bot.send_message(update.message.chat.id, "⚠ Non hai specificato un comando!\n" + "Sintassi corretta: `/bridge `") + discord_connection.send(f"!{data}") + result = discord_connection.recv() + if result == "error": + bot.send_message(update.message.chat.id, "⚠ Esecuzione del comando fallita.") + if result == "success": + bot.send_message(update.message.chat.id, "⏩ Comando eseguito su Discord.") + + def process(arg_discord_connection): print("Telegrambot starting...") if arg_discord_connection is not None: @@ -425,6 +439,7 @@ def process(arg_discord_connection): u.dispatcher.add_handler(CommandHandler("eat", cmd_eat)) u.dispatcher.add_handler(CommandHandler("ship", cmd_ship)) u.dispatcher.add_handler(CommandHandler("profile", cmd_profile)) + u.dispatcher.add_handler(CommandHandler("bridge", cmd_bridge)) u.dispatcher.add_handler(CallbackQueryHandler(on_callback_query)) u.bot.send_message(config["Telegram"]["main_group"], f"ℹ Royal Bot avviato e pronto a ricevere comandi!\n"