Source code for spotted.handlers.autoreply

"""/autoreply command"""

from telegram import Update
from telegram.ext import CallbackContext

from spotted.data import Config, PendingPost, Report
from spotted.utils import EventInfo

from .approve import reject_post


[docs] async def autoreply_cmd(update: Update, context: CallbackContext): """Handles the /autoreply command. Used by replying to one of his pending posts with /autoreply + one of the keys in the autoreplies dictionary in the config file. Send a message to the user with the autoreply message to inform them about a problem with their post Args: update: update event context: context passed by the handler """ info = EventInfo.from_message(update, context) arg = " ".join(info.args) print("ARGS:", arg) if arg not in Config.autoreplies_get("autoreplies") or arg == "lista": possible_args_text = "\n - ".join(Config.autoreplies_get("autoreplies").keys()) text = f"Possibili argomenti:\n - {possible_args_text}" await info.bot.send_message(chat_id=info.chat_id, text=text) return g_message_id = update.message.reply_to_message.message_id if (pending_post := PendingPost.from_group(admin_group_id=info.chat_id, g_message_id=g_message_id)) is not None: user_id = pending_post.user_id elif (report := Report.from_group(admin_group_id=info.chat_id, g_message_id=g_message_id)) is not None: user_id = report.user_id else: # the message was not a pending post or a report await info.bot.send_message( chat_id=info.chat_id, text="Il messaggio selezionato non รจ valido.\n" "Per mandare un messaggio ad un utente, rispondere al suo post o report con /autoreply", ) return text = Config.autoreplies_get("autoreplies")[arg] await info.bot.send_message(chat_id=user_id, text=f"COMUNICAZIONE DEGLI ADMIN SUL TUO ULTIMO POST:\n{text}") await info.bot.send_message( chat_id=info.chat_id, text="L'utente ha ricevuto il messaggio", reply_to_message_id=g_message_id )
[docs] async def autoreply_callback(update: Update, context: CallbackContext): """Handles the autoreply callback. Reply to the user with the autoreply message to inform them about the reason of the rejection Args: update: update event context: context passed by the handler """ info = EventInfo.from_callback(update, context) arg = info.args[0] # arg is the key of the autoreplies dictionary in the config file all_autoreplies = Config.autoreplies_get("autoreplies") current_reply = all_autoreplies.get(arg) pending_post = PendingPost.from_group(admin_group_id=info.chat_id, g_message_id=info.message_id) if pending_post: await info.bot.send_message(chat_id=pending_post.user_id, text=current_reply) if Config.settings_get("post", "reject_after_autoreply"): await reject_post(info=info, pending_post=pending_post, reason=arg) return None