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, "Э, нет, эта кнопка не для тебя")
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
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)
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, "Э, нет, эта кнопка не для тебя")
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, "Для жмака нужно иметь админку")
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, "Для жмака нужно иметь админку")
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='Это не ваша животинка 👀')
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)
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='Это не ваша креветка 👀')
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="Жмак учтён!")
def ironic(call): """Реакция, если обвинение было ироничным""" edit_text("Иронично, так иронично", call.message.chat.id, call.message.message_id) answer_callback(call.id)