Exemplo n.º 1
0
def replace_trigger(bot, update):
    mes = update.message
    if filter_is_pm(mes):
        return
    if mes.from_user.id not in get_admin_ids(bot=bot, chat_id=mes.chat_id):
        bot.send_message(chat_id=mes.chat_id,
                         text="Доступ только у админов.",
                         reply_to_message_id=mes.message_id)
        return
    text = mes.text.partition(" ")[2].lower()
    list_triggers = triggers_in.get(mes.chat_id)
    if list_triggers is None or text not in list_triggers:
        bot.send_message(chat_id=mes.chat_id,
                         text="Триггер не найден",
                         reply_to_message_id=mes.message_id)
        return
    request = "update triggers set type = %s, data_out = %s, creator = %s, date_created = %s where chat_id = %s and " \
              "text_in = %s"
    trigger_type, data = get_message_type_and_data(mes.reply_to_message)
    cursor.execute(request,
                   (trigger_type, data, mes.from_user.username
                    or mes.from_user.id, datetime.datetime.now(
                        tz=moscow_tz).replace(tzinfo=None), mes.chat_id, text))
    bot.send_message(chat_id=mes.chat_id,
                     text="Триггер успешно заменён!",
                     reply_to_message_id=mes.message_id)
    return
def notify_guild_to_battle(bot, update):
    mes = update.message
    chat_dict = ping_by_chat_id.get(mes.chat_id)
    if chat_dict is None:
        return
    if mes.from_user.id not in get_admin_ids(
            bot, chat_id=mes.chat_id) and not check_access(mes.from_user.id):
        bot.send_message(chat_id=mes.chat_id,
                         text="Доступ только у админов",
                         parse_mode='HTML')
        return
    if mes.text.partition("@")[0].split("_")[2] == "sleeping":
        target_list = chat_dict.get("sleeping")
    else:
        target_list = chat_dict.get("do not ready")
    i = 0
    response = ""
    for username in target_list:
        if i >= 4:
            response += "\n БИТВА!"
            bot.send_message(chat_id=mes.chat_id, text=response)
            response = ""
            i = 0
        response += "@{0} ".format(username)
        i += 1
    response += "\n БИТВА!"
    bot.send_message(chat_id=mes.chat_id, text=response)
Exemplo n.º 3
0
def info_trigger(bot, update):
    mes = update.message
    if filter_is_pm(mes):
        return
    if mes.from_user.id not in get_admin_ids(bot=bot, chat_id=mes.chat_id):
        bot.send_message(chat_id=mes.chat_id,
                         text="Доступ только у админов.",
                         reply_to_message_id=mes.message_id)
        return
    text = mes.text.partition(" ")[2].lower()
    list_triggers = triggers_in.get(mes.chat_id)
    chat_id = mes.chat_id
    if list_triggers is None:
        list_triggers = []
        triggers_in.update({mes.chat_id: list_triggers})
    if text not in list_triggers:
        if text not in global_triggers_in:
            bot.send_message(chat_id=mes.chat_id,
                             text="Триггер не найден",
                             reply_to_message_id=mes.message_id)
            return
        chat_id = 0
    request = "select creator, date_created from triggers where text_in = %s and chat_id = %s"
    cursor.execute(request, (text, chat_id))
    row = cursor.fetchone()
    response = "<code>{}</code> — создал <code>{}</code> {}".format(
        text, row[0], row[1].strftime("%d/%m/%y %H:%M:%S"))
    bot.send_message(chat_id=mes.chat_id,
                     text=response,
                     parse_mode='HTML',
                     reply_to_message_id=mes.message_id)
Exemplo n.º 4
0
def triggers(bot, update):
    mes = update.message
    if filter_is_pm(mes):
        return
    if mes.from_user.id not in get_admin_ids(bot=bot, chat_id=mes.chat_id):
        bot.send_message(chat_id=mes.chat_id,
                         text="Доступ только у админов.",
                         reply_to_message_id=mes.message_id)
        return
    local = get_triggers_list(mes.chat_id)
    global_triggers = get_triggers_list(0)
    response = f"<b>Список триггеров</b>:\n<b>Локальные триггеры</b>:\n{local}\n\n" \
               f"<b>Глобальные триггеры</b>:\n{global_triggers}"
    pattern = re.compile("(.*)\n([^\n]*$)", re.DOTALL)
    while len(response) > MAX_MESSAGE_LENGTH:
        # Если не влезает в одно сообщение
        # Отрезаем последнюю влезающую строку, отправляем сообщение без неё, склеиваем то, что не влезло, повторяем
        parse = re.match(pattern, response[:MAX_MESSAGE_LENGTH])
        bot.group_send_message(chat_id=mes.chat_id,
                               text=parse.group(1),
                               parse_mode='HTML')
        response = parse.group(2) + response[MAX_MESSAGE_LENGTH:]
    bot.group_send_message(chat_id=mes.chat_id,
                           text=response,
                           parse_mode='HTML')
    bot.send_message_group(mes.chat_id)
Exemplo n.º 5
0
def remove_trigger(bot, update):
    mes = update.message
    if filter_is_pm(mes):
        return
    if mes.from_user.id not in get_admin_ids(bot=bot, chat_id=mes.chat_id):
        bot.send_message(chat_id=mes.chat_id,
                         text="Доступ только у админов.",
                         reply_to_message_id=mes.message_id)
        return
    text = mes.text.partition(" ")[2].lower()
    chat_id = mes.chat_id
    trigger_list = triggers_in.get(mes.chat_id)
    if trigger_list is None or text not in trigger_list:
        chat_id = 0
        if text in global_triggers_in:
            if not check_access(mes.from_user.id):
                bot.send_message(
                    chat_id=mes.chat_id,
                    text="Недостаточно прав для удаления глобального триггера",
                    reply_to_message_id=mes.message_id)
                return
        else:
            bot.send_message(chat_id=mes.chat_id,
                             text="Триггер не найден",
                             reply_to_message_id=mes.message_id)
            return
        trigger_list = global_triggers_in
    trigger_list.remove(text)
    request = "delete from triggers where text_in = %s and chat_id = %s"
    cursor.execute(request, (text, chat_id))
    bot.send_message(chat_id=mes.chat_id,
                     text="Триггер успешно удалён!",
                     reply_to_message_id=mes.message_id)
Exemplo n.º 6
0
def add_trigger(bot, update):
    mes = update.message
    if filter_is_pm(mes):
        return
    if mes.from_user.id not in get_admin_ids(bot=bot, chat_id=mes.chat_id):
        bot.send_message(chat_id=mes.chat_id,
                         text="Доступ только у админов.",
                         reply_to_message_id=mes.message_id)
        return
    trigger_in = mes.text.partition(" ")[2].lower()
    if not mes.text.startswith("/create_global_trigger"):
        chat_id = mes.chat_id
        trigger_list = triggers_in.get(mes.chat_id)
        if trigger_list is None:
            trigger_list = []
            triggers_in.update({mes.chat_id: trigger_list})
    else:
        if mes.from_user.id != SUPER_ADMIN_ID:
            return

        chat_id = 0
        trigger_list = global_triggers_in
    list_triggers = triggers_in.get(chat_id) if chat_id else global_triggers_in
    if trigger_in in list_triggers:
        bot.send_message(chat_id=mes.chat_id,
                         text="Триггер уже существует!",
                         reply_to_message_id=mes.message_id)
        return
    if mes.reply_to_message is None:
        bot.send_message(
            chat_id=mes.chat_id,
            text="Сообщение должно быть ответом на другое сообщение.",
            reply_to_message_id=mes.message_id)
        return
    trigger_type, data = get_message_type_and_data(mes.reply_to_message)
    request = "insert into triggers(text_in, type, data_out, chat_id, creator, date_created) VALUES (%s, %s, %s, %s, " \
              "%s, %s)"
    cursor.execute(request,
                   (trigger_in, trigger_type, data, chat_id,
                    mes.from_user.username or mes.from_user.id,
                    datetime.datetime.now(tz=moscow_tz).replace(tzinfo=None)))
    trigger_list.append(trigger_in)
    bot.send_message(chat_id=mes.chat_id,
                     text="Триггер успешно создан!",
                     reply_to_message_id=mes.message_id)
def mute(bot, update, args):
    mes = update.message
    if (mes.from_user.id != SUPER_ADMIN_ID) and (
            mes.from_user.id not in get_admin_ids(bot, chat_id=mes.chat_id)):
        return
    if mes.reply_to_message is None:
        return
    if mes.reply_to_message.from_user.id == SUPER_ADMIN_ID:
        bot.send_message(chat_id=update.message.chat_id, text='Неа -__-')
        return
    if not args:
        return
    current = time.time()
    try:
        ban_for = (float(args[0]) * 60)
    except ValueError:
        bot.send_message(chat_id=update.message.chat_id,
                         text='Неверный синтаксис')
        return
    current += ban_for
    try:
        bot.restrictChatMember(chat_id=mes.chat_id,
                               user_id=mes.reply_to_message.from_user.id,
                               until_date=current,
                               permissions=ChatPermissions(
                                   can_send_other_messages=False,
                                   can_send_messages=False))
    except TelegramError:
        bot.send_message(
            chat_id=update.message.chat_id,
            text='Ошибка. Проверьте, что бот имеет требуемые права.')
        return
    bot.send_message(chat_id=update.message.chat_id,
                     text='Выполнено!',
                     reply_to_message_id=update.message.message_id)
    return
def notify_guild_attack(bot, update):
    mes = update.message
    remaining_time = get_time_remaining_to_battle()
    forward_message_date = utc.localize(
        mes.forward_date).astimezone(tz=moscow_tz).replace(tzinfo=None)
    if forward_message_date - datetime.datetime.now() > datetime.timedelta(
            minutes=2):
        return 0
    if remaining_time > datetime.timedelta(minutes=30):
        pass
        return 0
    ready_to_battle = mes.text.count("[⚔]") + mes.text.count("[🛡]")
    sleeping = mes.text.count("[🛌]") + mes.text.count("[⚒]")
    response = "<b>{0}</b>\nГотово к битве: <b>{1}</b>\nНе готово к битве, но занято <b>{2}</b>\n" \
               "Спит: <b>{3}</b>\n\nВремя до битвы: {4}\n".format(mes.text.splitlines()[0], ready_to_battle,
                                                                  mes.text.count("\n") - ready_to_battle - sleeping,
                                                                  sleeping, ":".join(str(remaining_time).partition(".")[0].split(":")[0:3]))
    request = "select guild_id from guilds where chat_id = %s"
    cursor.execute(request, (mes.chat_id, ))
    row = cursor.fetchone()
    if row is None:
        return
    guild = Guild.get_guild(guild_id=row[0])
    set = guild.settings.get(
        "battle_notify") if guild.settings is not None else True
    if guild is None or set is False:
        return
    if mes.chat_id != guild.chat_id:
        return
    if mes.from_user.id not in get_admin_ids(
            bot, chat_id=mes.chat_id) and not check_access(mes.from_user.id):
        bot.send_message(chat_id=mes.chat_id,
                         text="Доступ только у админов",
                         parse_mode='HTML',
                         reply_to_message_id=mes.message_id)
        return
    do_not_ready = []
    sleeping = []
    for string in mes.text.splitlines()[1:]:
        if not ("[⚔]" in string or "[🛡]" in string):
            nickname = string.partition("]")[2][1:]
            do_not_ready.append(nickname)
            if "[🛌]" in string or "[⚒]" in string:
                sleeping.append(nickname)

    in_dict_do_not_ready = []
    in_dict_sleeping = []
    ping_dict = {
        "do not ready": in_dict_do_not_ready,
        "sleeping": in_dict_sleeping
    }
    for player_id in guild.members:
        player = Player.get_player(player_id, notify_on_error=False)
        if player is None:
            continue
        db_nickname = player.nickname.partition("]")[2]
        if db_nickname in do_not_ready:
            in_dict_do_not_ready.append(player.username)
            if db_nickname in sleeping:
                in_dict_sleeping.append(player.username)

    ping_by_chat_id.update({mes.chat_id: ping_dict})
    response += "Пингануть тех, кто спит: /notify_guild_sleeping\n" \
                "Пингануть всех, кто не готов: /notify_guild_not_ready"
    bot.send_message(chat_id=mes.chat_id, text=response, parse_mode='HTML')