Example #1
0
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))
Example #2
0
def reset_test(message, person):
    database = Database()
    database.remove("basic_logic_tested", ("id", person.id))
    reply(
        message,
        "Предудыщий результат удалён. Пользователь {} может попробовать ещё".
        format(person.id))
Example #3
0
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')
Example #4
0
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))
Example #5
0
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)
Example #6
0
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)
Example #7
0
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)  # Следующее сообщение будет проверяться, как ответ на вопрос
Example #8
0
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')
Example #9
0
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()