Esempio n. 1
0
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))
Esempio n. 2
0
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")
Esempio n. 3
0
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))
Esempio n. 4
0
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)
Esempio n. 5
0
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)
Esempio n. 6
0
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))