def update_multi_vote(vote_id): """Обновляет мульти-голосовашку""" with open(MULTI_VOTES_FILE, encoding='utf-8') as file: votes_shelve = file.read() if votes_shelve: votes_shelve = literal_eval(votes_shelve) else: votes_shelve = {} votey = dict(votes_shelve[vote_id]) keyboard = InlineKeyboardMarkup() url = 'https://t.me/multifandomrubot?start=new_option{}'.format(vote_id) keyboard.row_width = 1 keyboard.add(InlineKeyboardButton("Предложить вариант", url=url)) for i in votey['keyboard']: keyboard.add( InlineKeyboardButton(i, callback_data='mv_' + str(votey['keyboard'].index(i)))) # Меняем текст голосовашки text = votey["text"] for i in votey['votes']: text += '\n{}: '.format(i[0]) + ', '.join(i[1].values()) edit_text(text=text, chat_id=votey['chat'], message_id=vote_id, reply_markup=keyboard, parse_mode="HTML")
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 run(self): CAPTCHERS.append( (self.message.new_chat_members[0].id, self.message.chat.id)) time.sleep(300) if (self.message.new_chat_members[0].id, self.message.chat.id) in CAPTCHERS.list: kick_and_unban(self.message.chat.id, self.message.new_chat_members[0].id) edit_text("Испытание креветкой провалено! (время истекло)", self.bots_message.chat.id, self.bots_message.message_id) CAPTCHERS.remove( (self.message.new_chat_members[0].id, self.message.chat.id))
def create_new_chat(call): """Add new system of chats""" database = Database() chat_type, link = cf.get_chat_type_and_chat_link(call.message.chat) all_systems = database.get_all('systems', 'id') ids = [int(sys['id']) for sys in all_systems] new_id = str(max(ids) + 1) cf.create_chat(call.message, new_id, chat_type, link, database) cf.create_system(call.message, new_id, database) edit_text("Создана новая система чатов с ID {}. Используйте /chat и /help " "для настройки и получения списка доступных команд".format(new_id), call.message.chat.id, call.message.message_id)
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)