def submit(message): """Подсчитывает результаты""" database = Database() markup = ReplyKeyboardRemove(selective=False) # убираем клаву success = 0 # Переменная для подсчёта правильных ответов person = message.from_user for i in range(1, 7): if database.get( 'basic_logic', ('right', database.get('basic_logic_tested', ('id', message.from_user.id))[f'answer_{i}'])): success += 1 if success >= 4: send( person.id, "Поздравляю! Ваше количество баллов ({}) достаточно для прохождения" .format(success), reply_markup=markup) send( -1001233124059, '#тест_на_логику {} ({}) [{}] осилил(а) тест со счётом {}'.format( person.first_name, person.username, person.id, success)) else: send( person.id, "К сожалению, количество ваших правильных ответов ({}) недостаточно для прохождения" .format(success), reply_markup=markup) send( -1001233124059, '#тест_на_логику {} ({}) [{}] провалил(а) тест со счётом {}'. format(person.first_name, person.username, person.id, success))
def reset_test(message, person): database = Database() database.remove("basic_logic_tested", ("id", person.id)) reply( message, "Предудыщий результат удалён. Пользователь {} может попробовать ещё". format(person.id))
def trigger(message): """Reacts to some triggers in people's messages""" database = Database() chat_id = message.chat.id chat = database.get('chats', ('id', chat_id)) system_id = chat['system'] content_type = 'text' if message.voice: content_type = 'voice' trigger_entry = database.get('triggers', ('id', chat_id), ('sys_or_chat', 'chat'), ('content_type', content_type)) if not trigger_entry: trigger_entry = database.get('triggers', ('id', system_id), ('sys_or_chat', 'system'), ('content_type', content_type)) if trigger_entry: if trigger_entry['to_delete']: delete(chat_id, message.message_id) user = message.from_user print(user) text = str(trigger_entry['text_ans']).format(username=user.username, nickname=user.first_name, user_id=user.id) send(chat_id, text, parse_mode='HTML')
def chat_id_update(message): """Update chat id if group converts to supergroup""" database = Database() old_chat = database.get('chats', ('id', message.migrate_from_chat_id)) if old_chat: chat_type, link = cf.get_chat_type_and_chat_link(message.chat) create_chat(message, old_chat['system'], chat_type, link, database) database.remove('chats', ('id', message.migrate_from_chat_id))
def elite(message): """Start the basic logic test""" database = Database() if database.get('basic_logic_tested', ('id', message.from_user.id)) is None: send( message.chat.id, "Сейчас я буду давать вам утверждения. Выбирайте те, что из них логически вытекают" ) person = (message.from_user.id, 'None', 'None', 'None', 'None', 'None', 'None', 'None', 'None', 'None', 'None', 'None', 'None', 'None') database.append(person, 'basic_logic_tested') # Создаём список вопросов all_questions = list(range(1, 31)) for i in range(6): question = choice(all_questions) value = database.get('basic_logic', ('id', question))['text'] print(value) database.change(value, f'question_{i + 1}', 'basic_logic_tested', ('id', message.from_user.id)) all_questions.remove(question) for i in range(1, 7): if database.get('basic_logic_tested', ('id', message.from_user.id))[f'answer_{i}'] == "None": ask_question(message, i) break else: submit(message)
def check(message, ques): """Запись ответа""" if message.text[0] == '/': reply(message, "Тест приостановлен, введите вашу команду ещё раз", reply_markup=ReplyKeyboardRemove(selective=False)) else: database = Database() database.change(message.text, f'answer_{ques}', 'basic_logic_tested', ('id', message.from_user.id)) if ques != 6: ask_question(message, ques + 1) else: submit(message)
def ask_question(message, question): """Задаём вопрос""" database = Database() ask = database.get('basic_logic_tested', ('id', message.from_user.id))[f'question_{question}'] # Получаем вопрос note = database.get('basic_logic', ('text', ask)) # Получаем полную инфу о вопросе # Получаем варианты ответов на вопрос answers = [note['right'], note['wrong_1'], note['wrong_2']] shuffle(answers) # Перемешиваем ответы markup = ReplyKeyboardMarkup(row_width=3) # Создаём клавиатуру для ответов for i in answers: # Заполняем клавиатуру кнопками markup.add(i) sent = send(message.from_user.id, note['text'], reply_markup=markup) # Отправляем сообщение register_handler(sent, check, question) # Следующее сообщение будет проверяться, как ответ на вопрос
def left_member(message): """Комментирует уход участника и прощается участником""" database = Database() chat = database.get('chats', ('id', message.chat.id)) system = chat['system'] if chat['type'] == 'private': chat = chat['name'] else: chat = '@' + chat['link'] member = message.left_chat_member if message.from_user.id == member.id: # Чел вышел самостоятельно if feature_is_available(message.chat.id, system, 'moves_delete'): delete(message.chat.id, message.message_id) else: reply(message, "Минус чувачок") send(member.id, 'До встречи в ' + chat) elif feature_is_available(message.chat.id, system, 'moves_delete'): # Чела забанили delete(message.chat.id, message.message_id) # Notify admins if admin's chat exists admin_place = database.get('systems', ('id', system))['admin_place'] if admin_place: text = f'{person_info_in_html(member)} теперь не в {chat_info_in_html(message.chat)}' send(admin_place, text, parse_mode='HTML')
def new_member(message, member): """Реагирует на вход в чат""" database = Database() # Declaring variables text = '' keyboard = None captcha = False sent = None name = html_cleaner(member.first_name) system = database.get('chats', ('id', message.chat.id))['system'] chat_configs = get_system_configs(system) if database.get('members', ('id', member.id), ('rank', chat_configs['ranks'][0]), ('system', system)) and \ feature_is_available(message.chat.id, system, 'violators_ban'): kick(message.chat.id, member.id) elif not cooldown(message, "entrance", timeout=database.get('systems', ('id', system))['entrance_cooldown'], notify=False, individual=False): kick_and_unban(message.chat.id, member.id) elif is_suitable(message, member, 'uber', loud=False) and feature_is_available( message.chat.id, system, 'admins_promote'): promote(message.chat.id, member.id, can_change_info=True, can_delete_messages=True, can_invite_users=True, can_restrict_members=True, can_pin_messages=True, can_promote_members=True) text += chat_configs['greetings']['full_admin'].format(name=name) elif is_suitable(message, member, 'boss', loud=False) and feature_is_available( message.chat.id, system, 'admins_promote'): promote(message.chat.id, member.id, can_change_info=False, can_delete_messages=True, can_invite_users=True, can_restrict_members=True, can_pin_messages=True, can_promote_members=False) text += chat_configs['greetings']['admin'].format(name=name) elif feature_is_available(message.chat.id, system, 'newbies_captched') and \ member.id == message.from_user.id and time() - message.date < 60: text = chat_configs['greetings']['captcha'].format(name=name) keyboard = create_captcha_keyboard() captcha = True else: text = chat_configs['greetings']['standard'].format(name=name) if feature_is_available(message.chat.id, system, 'moves_delete') and not feature_is_available( message.chat.id, system, 'newbies_captched'): delete(message.chat.id, message.message_id) else: sent = reply(message, text, reply_markup=keyboard, parse_mode='HTML') # Notify admins if admin's chat exists admin_place = database.get('systems', ('id', system))['admin_place'] if admin_place: text = f'{person_info_in_html(member)} теперь в {chat_info_in_html(message.chat)}' send(admin_place, text, parse_mode="HTML") if captcha: restrict(message.chat.id, member.id, until_date=time() + 300) captcha_ban = CaptchaBan(message, sent) captcha_ban.start()