예제 #1
0
def place_here_handler(call):
    """Выбирает, куда прислать голосовашку"""
    # Проверка, нажал ли на кнопку не тот, кто нужен
    if call.message.reply_to_message.from_user.id == call.from_user.id:
        complicated_commands.place_here(call)
    else:
        output.answer_callback(call.id, "Э, нет, эта кнопка не для тебя")
예제 #2
0
def rank_required(message, person, system, min_rank, loud=True):
    """Checks if person has rank required for something"""
    LOG.log("rank_required invoked from userID {}".format(
        message.from_user.id))
    database = Database()
    chat_configs = get_system_configs(system)
    ranks = chat_configs['ranks']
    you = get_person(message,
                     person,
                     system,
                     database,
                     system_configs=chat_configs)
    your_rank = you['rank']
    your_rank_n = ranks.index(your_rank)
    min_rank_n = ranks.index(min_rank)
    if your_rank_n < min_rank_n and loud:
        if isinstance(message, CallbackQuery):
            answer_callback(
                message.id,
                "Ваше звание ({}) не дотягивает до звания ({}) для жмака".
                format(your_rank, min_rank),
                show_alert=True)
        else:
            reply(
                message,
                "Ваше звание ({}) не дотягивает до необходимого ({}) для этого"
                .format(your_rank, min_rank))
    return min_rank_n <= your_rank_n
예제 #3
0
def adapt_vote(call):
    """Обновляет адапт-голосовашку"""
    user = call.from_user
    user_username = user.username  # юзернейм жмакнувшего челика
    user_nickname = user.first_name
    user_id = user.id
    msg_id = call.message.message_id  # Ай ди жмакнутого сообщения
    # Как этот челик будет отображаться в сообщении
    link = f'<a href="t.me/{user_username}">{user_nickname}</a>'
    which = int(call.data[-1])  # Где менять мнение
    with open(ADAPT_VOTES_FILE, encoding='utf-8') as file:
        votes_shelve = literal_eval(file.read())
    votey = votes_shelve[msg_id]  # Получаем необходимую нам голосовашку в хранилище

    if msg_id in votes_shelve.keys():
        if user_id in votey['votes'][which][1].keys(
        ):  # Челик нажал на кнопку, на которой есть его мнение
            # удаляем челика из словаря
            votey['votes'][which][1].pop(user_id)
        else:
            for i in votey['votes']:
                i[1].pop(user_id, None)
            # если чедика нету - то просто добавляем
            votey['votes'][which][1].update([(user_id, link)])
    # Сохраняем изменения
    votes_shelve[msg_id] = votey
    with open(ADAPT_VOTES_FILE, 'w', encoding='utf-8') as file:
        file.write(str(votes_shelve))
    answer_callback(call.id, text="Жмак учтён!")
    update_adapt_vote(call.message.message_id)
예제 #4
0
def ironic_handler(call):
    """Реакция, если обвинение было ироничным"""
    # Проверка, нажал ли на кнопку не тот, кто нужен
    if call.message.reply_to_message.from_user.id == call.from_user.id:
        complicated_commands.ironic(call)
    else:
        output.answer_callback(call.id, "Э, нет, эта кнопка не для тебя")
예제 #5
0
def create_new_chat_handler(call):
    """Add new system of chats"""
    member = output.get_member(call.message.chat.id, call.from_user.id)
    if member.status in ("creator", "administrator"):
        complicated_commands.create_new_chat(call)
    else:
        output.answer_callback(call.id, "Для жмака нужно иметь админку")
예제 #6
0
def message_about_add_chat_handler(call):
    """Tell users to use /add_chat x"""
    if output.get_member(call.message.chat.id, call.from_user.id).status in \
            ("creator", "administrator"):
        output.edit_text("Введите команду\n\n/add_chat x\n\n"
                         "Где x это номер системы вашего чата (ищите его в /help вашего чата",
                         call.message.chat.id, call.message.message_id)
    else:
        output.answer_callback(call.id, "Для жмака нужно иметь админку")
예제 #7
0
def captcha_failed(call):
    """Bot reacts to someone clicked wrong button"""
    if CAPTCHERS.remove_captcher(call.from_user.id, call.message.chat.id):
        kick_and_unban(call.message.chat.id, call.from_user.id)
        answer_callback(call.id)
        edit_text("Испытание креветкой провалено! (нажата неверная кнопка)", call.message.chat.id,
                  call.message.message_id)
    else:
        answer_callback(call.id, text='Это не ваша животинка 👀')
예제 #8
0
def non_ironic(call):
    """Реакция, если обвинение было неироничным"""
    # Проверка, нажал ли на кнопку не тот, кто нужен
    edit_text("Неиронично!", call.message.chat.id, call.message.message_id)
    send(admin_place(call.message, Database()),
         "Произошло оскорбление! " + "[Ссылка на инцидент](t.me/{}/{})".format(
             call.message.reply_to_message.chat.username, call.message.reply_to_message.message_id),
         parse_mode="Markdown")
    answer_callback(call.id)
예제 #9
0
def captcha_completed(call):
    """Bot reacts to someone clicked correct button"""
    if CAPTCHERS.remove_captcher(call.from_user.id, call.message.chat.id):
        restrict(call.message.chat.id,
                 call.from_user.id,
                 can_send_messages=True,
                 can_send_other_messages=True,
                 can_send_media_messages=True,
                 can_add_web_page_previews=True)
        answer_callback(call.id, text='Испытание креветкой пройдено!')
        edit_markup(call.message.chat.id, call.message.message_id)
    else:
        answer_callback(call.id, text='Это не ваша креветка 👀')
예제 #10
0
def add_vote(call):
    """Вставляет голос в голосоовашку"""
    reply_markup = VOTE_KEYBOARD
    text = ''
    user = call.from_user
    user_username = user.username  # юзернейм жмакнувшего челика
    user_nickname = user.first_name
    user_id = user.id
    msg_id = call.message.message_id  # Ай ди жмакнутого сообщения
    # Как этот челик будет отображаться в сообщении
    link = f'<a href="t.me/{user_username}">{user_nickname}</a>'
    with open(VOTES_FILE, 'r', encoding='utf-8') as file:
        votes_shelve = literal_eval(file.read())

    if msg_id in votes_shelve.keys():
        votey = votes_shelve[msg_id]  # Получаем необходимую нам голосовашку в хранилище
        if time() - votey['time'] > 86400 and len(votey['favor']) != len(
                votey['against']):  # это сутки
            reply_markup = None
            text += 'Голосование окончено. Новые голоса не принимаются\n\n'
        # Person clicked a button containing their opinion
        elif user_id in votey[call.data].keys():
            # удаляем челика из словаря
            votey[call.data].pop(user_id)
        else:
            # Чистим прошлые мнения челика и записываем новое
            votey['favor'].pop(user_id, None)
            votey['against'].pop(user_id, None)
            votey['abstain'].pop(user_id, None)
            votey[call.data].update([(user_id, link)])
        votes_shelve[msg_id] = votey
        text += votey["text"]
        text += '\nЗа: ' + ', '.join(votey["favor"].values())
        text += '\nПротив: ' + ', '.join(votey["against"].values())
        text += '\nВоздерживающиеся: ' + ', '.join(votey["abstain"].values())
    else:
        reply_markup = None
        text += 'Голосование окончено по причине ненахода записи об этой голосовашки. ' \
                'Новые голоса не принимаются\n\n'
        text += call.message.text
    with open(VOTES_FILE, 'w', encoding='utf-8') as file:
        file.write(str(votes_shelve))
    edit_text(text=text,
              chat_id=call.message.chat.id,
              message_id=call.message.message_id,
              reply_markup=reply_markup,
              parse_mode="HTML")
    answer_callback(call.id, text="Жмак учтён!")
예제 #11
0
def ironic(call):
    """Реакция, если обвинение было ироничным"""
    edit_text("Иронично, так иронично", call.message.chat.id, call.message.message_id)
    answer_callback(call.id)