def me_message(message): # В ЛС бот не может удалять сообщения пользователя try: my_bot.delete_message(chat_id=message.chat.id, message_id=message.message_id) except Exception: logging.exception("message") # Если у пользователя есть юзернэйм, то берём его как your_name if message.from_user.username is not None: your_name = '[@{}](tg://user?id={})'.format(message.from_user.username, message.from_user.id) # Иначе, берём имя пользователя, которое есть всегда else: your_name = '[{}](tg://user?id={})'.format(message.from_user.first_name, message.from_user.id) # Если /me непусто, берём всё, что после '/me ' if len(message.text.split()) < 2: return your_message = message.text.split(maxsplit=1)[1] your_me = "{} {}".format(your_name, your_message) try: # Если /me было ответом на какое-то сообщение, то посылаем запрос как ответ # TODO: расширить эту фичу на все команды if getattr(message, 'reply_to_message') is not None: my_bot.send_message(message.chat.id, your_me, parse_mode="Markdown", disable_notification=True, reply_to_message_id=message.reply_to_message.message_id) else: my_bot.send_message(message.chat.id, your_me, parse_mode="Markdown", disable_notification=True) except Exception: logging.exception("message") user_action_log(message, "called the me:\n{}".format(your_me))
def admin_compress(message): # Обрабытываем только конструкции типа # '/compress <@username> <N>' или # '/compress <first_name> <last_name> <N>' if len(message.text.split()) > 4 or len(message.text.split()) < 3 or not message.text.split()[-1].isdigit: return # if (len(message.text.split()) == 3 or len(message.text.split()) == 4) and message.text.split()[-1].isdigit(): num_max = config.compress_num_max target_user = '' target_fname = '' target_lname = '' uid = 0 # Если анализируем по юзернейм, то убираем '@' if len(message.text.split()) == 3 and message.text.split()[1].startswith('@'): target_user = (message.text.split()[1].split('@'))[1] elif len(message.text.split()) == 4: target_fname = message.text.split()[1] target_lname = message.text.split()[2] elif message.text.split()[1].isdigit: uid = int(message.text.split()[1]) else: return # Последний элемент запроса - число предыдущих сообщений, которых нужно проанализировать num = int(message.text.split()[-1]) if num <= 1 or num > num_max: return compress_msgs(message, target_user, target_fname, target_lname, uid, num) try: my_bot.delete_message(chat_id=message.chat.id, message_id=message.message_id) except Exception: logging.exception("message")
def admin_clean(message): if not hasattr(admin_clean, "allow_long"): admin_clean.allow_long = False if not hasattr(admin_clean, "allow_long_id"): admin_clean.allow_long_id = -1 if len(message.text.split()) == 1: if admin_clean.allow_long: user_action_log(message, "cancelled big cleanup") admin_clean.allow_long = False return else: num_str = message.text.split()[1] if not num_str.isdigit(): if admin_clean.allow_long: user_action_log(message, "cancelled big cleanup") admin_clean.allow_long = False return num = int(num_str) allow_long_str = 'Long cleanup is allowed' if admin_clean.allow_long else 'Long cleanup is not allowed' user_action_log( message, "has launched cleanup of {} messages. {}".format(num, allow_long_str)) if num > 500: my_bot.reply_to( message, "Тааак, падажжи, слишком большое число указал, больше 500 не принимаю" ) return if num > 128 and (not admin_clean.allow_long or admin_clean.allow_long_id != message.from_user.id): my_bot.reply_to( message, "Вы запросили очистку более 128 сообщений. Для подтверждения отправьте " "команду еще раз. Для отмены отправльте команду с текстовым параметром. " "С уважением, ваш раб") admin_clean.allow_long = True admin_clean.allow_long_id = message.from_user.id return count = 0 msg_id = message.message_id while count < num: try: my_bot.delete_message(chat_id=message.chat.id, message_id=msg_id) count += 1 except: pass msg_id -= 1 user_action_log(message, "cleaned up {} messages".format(count))
def check_disa(message): if getattr(message, 'forward_from_chat') is not None: if message.forward_from_chat.id in config.stupid_channels: try: my_bot.delete_message(chat_id=message.chat.id, message_id=message.message_id) action_log("Successfully deleted a forward-post from this crap channel:\n{}".format( message.forward_from_chat.title)) except Exception: pass disa_commands.check_disa(message)
def check_disa(message): if getattr(message, 'forward_from_chat') is not None: if message.forward_from_chat.id in config.stupid_channels: try: my_bot.delete_message(chat_id=message.chat.id, message_id=message.message_id) action_log( "Successfully deleted a forward-post from this crap channel:\n{}" .format(message.forward_from_chat.title)) except Exception: pass disa_commands.check_disa(message)
def admin_clean(message): if not hasattr(admin_clean, "allow_long"): admin_clean.allow_long = False if not hasattr(admin_clean, "allow_long_id"): admin_clean.allow_long_id = -1 if len(message.text.split()) == 1: if admin_clean.allow_long: user_action_log(message, "cancelled big cleanup") admin_clean.allow_long = False return else: num_str = message.text.split()[1] if not num_str.isdigit(): if admin_clean.allow_long: user_action_log(message, "cancelled big cleanup") admin_clean.allow_long = False return num = int(num_str) allow_long_str = 'Long cleanup is allowed' if admin_clean.allow_long else 'Long cleanup is not allowed' user_action_log(message, "has launched cleanup of {} messages. {}".format(num, allow_long_str)) if num > 500: my_bot.reply_to(message, "Тааак, падажжи, слишком большое число указал, больше 500 не принимаю") return if num > 128 and (not admin_clean.allow_long or admin_clean.allow_long_id != message.from_user.id): my_bot.reply_to(message, "Вы запросили очистку более 128 сообщений. Для подтверждения отправьте " "команду еще раз. Для отмены отправльте команду с текстовым параметром. " "С уважением, ваш раб") admin_clean.allow_long = True admin_clean.allow_long_id = message.from_user.id return count = 0 msg_id = message.message_id while count < num: try: my_bot.delete_message(chat_id=message.chat.id, message_id=msg_id) count += 1 except: pass msg_id -= 1 user_action_log(message, "cleaned up {} messages".format(count))