예제 #1
0
def game(message):
    db = MySQLer(config.db_config)
    rows = db.join_select_all()

    # выбираем в качестве правильного ответа
    # рандомную строку из бд (file_id, song_name)
    i = rand(0, db.rows_count('files') - 1)
    right_answer = rows[i]

    # выбираем 3 рандомных неправильных ответа
    wrong_answers = []
    indexes = [i]
    while len(wrong_answers) != 3:
        j = rand(0, db.rows_count('files') - 1)
        if j not in indexes:
            wrong_answers.append(rows[j][0])
            indexes.append(j)

    print(right_answer, wrong_answers)

    # сохраняем правильный ответ
    # для текущего юзера
    utils.set_user_game(message.chat.id, right_answer[0])
    # генерируем клавиатуру
    markup = utils.generate_markup([right_answer[0]] + wrong_answers)

    bot.send_voice(message.chat.id, right_answer[1], reply_markup=markup)

    db.close_connection()
예제 #2
0
def game(message):
    db_worker = SQLighter(config.database_name)
    row = db_worker.select_single(random.randint(1, utils.get_rows_count()))
    markup = utils.generate_markup(row[2], row[3])
    bot.send_voice(message.chat.id, row[1], reply_markup=markup)
    utils.set_user_game(message.chat.id, row[2])
    db_worker.close()
예제 #3
0
def game(message):
    logging.info("User {} started the game".format(message.chat.id))

    db_worker = MusicDao(config.database_name)

    answer_options = random.sample(range(db_worker.count_rows()), 4)

    # Получаем строки из БД
    rows = [db_worker.find_by_id(option + 1) for option in answer_options]
    shuffle(rows)

    names = [row[2] for row in rows]
    hidden = names[0]

    logging.info("Hidden song: {}, answer options: {}".format(names[0], names))

    markup = generate_markup(names)

    # Отправляем аудиофайл с вариантами ответа
    bot.send_voice(message.chat.id,
                   rows[0][1],
                   reply_markup=markup,
                   duration=20)

    utils.set_user_game(message.chat.id, hidden)

    db_worker.close()
예제 #4
0
def game_1_6(message):
    # Подключаемся к БД
    message_namber = message.text
    answer_number = message_namber.split('/')
    #keyboard_hider = types.ReplyKeyboardRemove()
    db_worker = SQLighter(config.database_name)
    # Получаем случайную строку из БД
    row = db_worker.select_single(
        random.randint(1, utils.get_rows_count(answer_number[1])),
        answer_number[1])
    # Формируем разметку
    markup = utils.generate_markup(row[4], row[5], answer_number[1])
    if answer_number[1] == '3' or answer_number[1] == '5':
        # Отправляем вводную часть вопроса
        bot.send_message(message.chat.id, row[2])
        # Отправляем картинку
        bot.send_photo(message.chat.id, row[1])
    if answer_number[1] == '4' or answer_number[1] == '6':
        # Отправляем вводную часть вопроса с форматированием
        bot.send_message(message.chat.id, row[2], parse_mode='HTML')
        # Отправляем основную часть вопроса с форматированием
        bot.send_message(message.chat.id, row[1], parse_mode='HTML')
    # Отправляем вопрос и заменяем кдавиатуру на варианты ответа
    bot.send_message(message.chat.id, row[3], reply_markup=markup)

    # Включаем "игровой режим"... ждем ответа от пользователя
    utils.set_user_game(message.chat.id, row[4], row[6])
    # Отсоединяемся от БД
    db_worker.close()
예제 #5
0
def game_7_18_not_9_10(message):
    #получаем сообщение пользователя
    message_namber = message.text
    #разбиваем сообщение на части, делитель - символ /
    answer_number = message_namber.split('/')
    # Подключаемся к БД
    db_worker = SQLighter(config.database_name)
    # Получаем случайную строку из БД по номеру таблицы взятую из сообщения answer_number
    row = db_worker.select_single(
        random.randint(1, utils.get_rows_count(answer_number[1])),
        answer_number[1])
    if answer_number[1] == '7' or answer_number[1] == '11' or answer_number[
            1] == '12':
        # Отправляем вводную часть вопроса
        bot.send_message(message.chat.id, row[2])
        # Отправляем картинку
        bot.send_photo(message.chat.id, row[1])
    elif answer_number[1] == '8':
        # Отправляем вводную часть вопроса с форматированием
        bot.send_message(message.chat.id, row[2], parse_mode='HTML')
        # Отправляем основную часть вопроса
        bot.send_message(message.chat.id, row[1])
    # Отправляем вопрос
    bot.send_message(message.chat.id, row[3])
    # Включаем "игровой режим"... ждем ответа от пользователя
    utils.set_user_game(message.chat.id, row[4], row[5])
    # Отсоединяемся от БД
    db_worker.close()
예제 #6
0
def training_mode(message):
    """Start new game with current user."""

    session = Session()
    data = []
    for word in session.query(Word).join(WordToUser).join(User).filter(
            User.chat_id == message.chat.id).all():
        data.append({
            "name": f'{word.name}',
            "translation": f'{word.translation}'
        })
    if not data:
        return bot.send_message(message.chat.id, "Add some words before!")
    if len(data) == 1:
        return bot.send_message(message.chat.id,
                                "You must have more than 2 words!")
    random.shuffle(data)
    session.close()
    word = data.pop(-1)
    wrong_word = data[0]
    markup = telebot.types.ReplyKeyboardMarkup(one_time_keyboard=True,
                                               resize_keyboard=True)
    data = [word['translation'], wrong_word['translation']]
    random.shuffle(data)
    markup.add(*data)
    set_user_game(message.chat.id, word['translation'])
    msg = bot.send_message(message.chat.id,
                           f"{word['name']}",
                           reply_markup=markup)
    bot.register_next_step_handler(msg, check_answer)
예제 #7
0
def game(message):
    db_worker = SQLLiter(config.DB_NAME)
    row = db_worker.fetch_single_record(row_number=random.randint(1, utils.get_rows_count()[0]))[0]
    markup = utils.generate_markup(right_answer=row[2], wrong_answers=row[3])
    bot.send_voice(chat_id=message.chat.id, voice=row[1], reply_markup=markup)
    utils.set_user_game(chat_id=message.chat.id, right_answer=row[2])
    db_worker.close_connection()
예제 #8
0
def game(call):
    if call.data == "game":
        db_worker = SQLighter(database_name)
        row = db_worker.select_single(random.randint(1,
                                                     utils.get_rows_count()))
        markup = utils.generate_markup(row[2], row[3])
        img = open("pictures/" + row[1] + '.jpg', 'rb')
        bot.send_photo(call.message.chat.id, img, reply_markup=markup)
        utils.set_user_game(call.message.chat.id, row[2])
        img.close()
        db_worker.close()
예제 #9
0
def game(message):
    global test
    if (message.text == 'Dopeclvb') or (message.text == 'Погнали!'):
        if test:
            game.k = 1
            test = False
        db_worker = SQLighter(config.database_name)
        row = db_worker.select_single(game.k)
        markup = utils.generate_markup(row[2], row[3])
        bot.send_voice(message.chat.id, row[1], reply_markup=markup)
        utils.set_user_game(message.chat.id, row[2])
        db_worker.close()
    elif (message.text == 'Pharaoh') or (message.text == 'Давай следующий!'):
        if test:
            game.k = 1
            test = False
        db_worker = SQLighter(config.database_name)
        row = db_worker.select_single(game.k)
        markup = utils.generate_markup(row[2], row[3])
        bot.send_voice(message.chat.id, row[1], reply_markup=markup)
        utils.set_user_game(message.chat.id, row[2])
        db_worker.close()
    else:
        answer = utils.get_answer_for_user(message.chat.id)
        if not answer:
            bot.send_message(
                message.chat.id,
                'Чтобы начать игру, наберите любую из команд /...')
        else:
            keyboard_hider = types.ReplyKeyboardRemove()
            if message.text == answer:
                bot.send_message(message.chat.id,
                                 'Чертовски правильный ответ',
                                 reply_markup=keyboard_hider)
            else:
                bot.send_message(message.chat.id,
                                 'Эх, надо бы подучить треки, неверно',
                                 reply_markup=keyboard_hider)
            utils.finish_user_game(message.chat.id)
            markup_d = types.ReplyKeyboardMarkup(one_time_keyboard=True,
                                                 resize_keyboard=True)
            item1_d = types.KeyboardButton('Погнали!')
            item2_d = types.KeyboardButton('Выход:(')
            markup_d.add(item1_d, item2_d)
            if game.k < utils.get_rows_count():
                game.k += 1
                bot.send_message(message.chat.id,
                                 'Готов к следующему треку?',
                                 reply_markup=markup_d)
            else:
                bot.send_message(message.chat.id,
                                 'Больше треков нет, выхожу из игры')
                test = True
예제 #10
0
def game(message):
    # Подключаемся к БД
    db_worker = SQLighter(config.database_name)
    # Получаем случайную строку из БД
    row = db_worker.select_single(random.randint(1, utils.get_rows_count()))
    # Формируем разметку
    markup = utils.generate_markup(row[2], row[3])
    # Отправляем аудиофайл с вариантами ответа
    bot.send_voice(message.chat.id, row[1], reply_markup=markup, duration=20)
    # Включаем "игровой режим"
    utils.set_user_game(message.chat.id, row[2])
    # Отсоединяемся от БД
    db_worker.close()
예제 #11
0
def Set_ID(message):
    db_worker = SQLighter(config.database_name)
    i = 0
    mass = []
    while i < utils.get_rows_count():
        row = db_worker.select_single(i+1)
        mass.append(row[2])
        i = i + 1

    bot.send_message(message.chat.id, "*примітка (якщо вивведете невірний номер, буде ввімкнена затримка)\n" +
                                      "Введіть номер зілікової книги:")
    utils.set_user_game(message.chat.id, mass)
    db_worker.close()
예제 #12
0
def game(message):
    # Подключаемся к БД
    db_worker = SQLighter(config.database_name)
    # Получаем случайную строку из БД
    row = db_worker.select_single(random.randint(1, utils.get_rows_count()))
    # Формируем разметку
    markup = utils.generate_markup(row[2],row[3])
    # Отправляем аудиофайл с вариантами ответа
    bot.send_voice(message.chat.id, row[1], reply_markup=markup)
    # Включаем "игровой режим"
    utils.set_user_game(message.chat.id, row[2])
    # Отсоединяемся от БД
    db_worker.close()
예제 #13
0
def game(message):
    cid = message.chat.id
    uid = message.from_user.id
    chat_type = message.chat.type
    db_worker = SQLighter(config.database_name)
    row = db_worker.select_single(random.randint(1, utils.get_rows_count()))
    markup = utils.generate_markup(row[2],row[3])
    if chat_type == "private":
        bot.send_voice(cid, row[1], reply_markup=markup)
        utils.set_user_game(cid, row[2])
    elif (chat_type == "group")|(chat_type == "supergroup"):
        bot.send_voice(cid, row[1], reply_markup=markup, reply_to_message_id=message.message_id)
        utils.set_user_game(uid, row[2])
    db_worker.close()
예제 #14
0
def next_song(message):
    db_worker = SQLighter(config.database_name)
    user = db_worker.get_user(message.chat.id)
    song_order = user[3]
    score = user[2]
    rownum = utils.get_rows_count()
    if song_order >= rownum+1:
        db_worker.reset_user(message.chat.id)
        bot.send_message(message.chat.id, 'Упс! Песни закончились и ваш результат {} угаданных из {}! Чтобы начать игру заново, введите команду /game'.format(score, rownum))
    else:
        song = db_worker.select_single(song_order)
        markup = utils.generate_markup(song[2], song[3])
        bot.send_voice(message.chat.id, song[1], reply_markup=markup)
        utils.set_user_game(message.chat.id, song[2])
    db_worker.close()
예제 #15
0
 def send_question_from_db(self, message, step):
     db_worker = SQLLighter(config.database_name)
     utils.count_rows_for_step(step)
     row = db_worker.select_single_for_step(random.randint(1, utils.get_rows_count()), step)
     markup = utils.generate_markup(row[2], row[3])
     utils.set_user_game(message.chat.id, row[0],row[2])
     q_id = utils.get_q_id_for_user(message.chat.id)
     check_chat = db_worker.count_rows_question_for_chat(message.chat.id, q_id)
     if check_chat == 0:
         self.bot.send_message(message.chat.id, row[1], reply_markup=markup)
         db_worker.save_question_result(message.chat.id, row[0])
     else:
         self.bot.send_message(message.chat.id, text='Вы уже отвечали на вопросы тестирования. Повторная попытка!')
         utils.finish_user_game(message.chat.id)
     db_worker.close()
예제 #16
0
def game(message):
    db = DBase(config.database_name)
    g = utils.get_rows_count()
    L = list(range(1, g + 1))
    random.shuffle(L)
    LL = []
    for i in range(4):
        row = db.select_single(L[i])
        LL.append(row[2])
    markup = utils.generate_markup(LL)
    ans = db.select_single(L[0])
    bot.send_voice(message.chat.id,
                   ans[1],
                   reply_markup=markup,
                   reply_to_message_id=message.message_id)
    utils.set_user_game(message.chat.id, ans[2], message.chat.username)
    db.close()
예제 #17
0
def game(message):
    rows_count = utils.get_rows_count()
    if rows_count == 0:
        bot.send_message(
            message.chat.id,
            "Бот не настроен. Выберите команду /setup, чтобы настроить бота.")
        return

    # Выбираем случайный вопрос
    row_id = random.randint(1, rows_count)
    row = db_manager.select_row(row_id)

    # Отправляем вопрос
    markup = utils.generate_markup(row['right_answer'], row['wrong_answers'])
    msg = bot.send_voice(message.chat.id, row['file_id'], reply_markup=markup)

    # Записываем состояние игры для игрока.
    utils.set_user_game(message.chat.id, row['right_answer'])
예제 #18
0
def start_game(message):
    if message.json['text'] == '/help':
        string = '/play - играть/показать загадку\n/score - текущий счёт\n/reset - сброс счёта\n/help - выводит текущее сообщение'
        bot.send_message(message.chat.id, string)
    elif message.json['text'] == '/score':
        get_score(message)
    elif message.json['text'] == '/reset':
        bot.send_message(message.chat.id, reset_all(message.chat.id))
    elif message.json['text'] == '/play':
        user = get_user_by_id(message.chat.id)
        if user is None:
            add_user_in_list(message.chat.id)
        row = get_random_riddle_to_user(message.chat.id)
        if row == None:
            bot.send_message(message.chat.id, 'Все загадки отгаданы! Поздравляем!')
            return
        markup = utils.generate_keyboard(row.correct_answer, row.wrong_answers)
        bot.send_message(message.chat.id, row.text, reply_markup=markup)
        utils.set_user_game(message.chat.id, row.correct_answer)    
예제 #19
0
def check_answer(message):
    # Если функция возвращает None -> Человек не в игре
    answer = utils.get_answer_for_user(message.chat.id)
    # Если None:
    if not answer:
        if message.text == "Начать игру":
            # Подключаемся к БД
            db_worker = SQLighter(config.database_name)
            # Получаем слачайную строку из БД
            row = db_worker.select_single(random.randint(1, utils.get_rows_count()))
            # Формируем разметку
            markup = utils.generate_markup(row[2], row[3])
            # отправляем аудиофайл с вариантами ответа
            bot.send_voice(message.chat.id, row[1], reply_markup=markup)
            # Включаем "игровой режим"
            utils.set_user_game(message.chat.id, row[2])
            # Отсоединяемся от БД
            db_worker.close()
        elif message.text == 'Cтатистика':
            Res = utils.return_res(message.chat.id)
            bot.send_message(message.chat.id, 'Ваш cчет: ' + str(Res))
        else:
            bot.send_message(message.chat.id, 'Чтобы начать игру, напишите команду /game')
            

    else:
        # Уберём клавиатуру с вариантами ответа, и вернём предыдущую.
        markup = utils.menu()
        # Если ответ правильный/неправильный
        if message.text == answer:
            bot.send_message(message.chat.id, 'Верно', reply_markup=markup)
            res = True
        else:
            bot.send_message(message.chat.id, 'Не верно. Попробуйте еще раз!', reply_markup=markup)
            res = False
        utils.remove_res(message.chat.id, res)
        # Удаляем юзера из хранилища (игра закончена)
        utils.finish_user_game(message.chat.id)
예제 #20
0
def game_10(message):
    code = utils.set_user_code_get(message.chat.id)
    if not code or code == '':
        markup = types.ReplyKeyboardMarkup(resize_keyboard=True,
                                           one_time_keyboard=True)
        markup.row('/sсhoolalgorithm')
        markup.row('/basic', '/pascal')
        markup.row('/python')
        bot.send_message(
            message.chat.id,
            'ВНИМАНИЕ! Не выбран предпочитаемый язык программирования!\nВыбери предпочитаемый язык программирования:\n * shoolAlgorithm - Алгоритмический язык (КУМИР)\n * basic - бейсик\n * pascal - Паскаль\n * Pyhon - Пайтон (Питон)',
            reply_markup=markup)
    else:
        #получаем сообщение пользователя
        message_namber = message.text
        #разбиваем сообщение на части, делитель - символ /
        answer_number = message_namber.split('/')
        # Подключаемся к БД
        db_worker = SQLighter(config.database_name)
        # Получаем случайную строку из БД по номеру таблицы взятую из сообщения answer_number
        row = db_worker.select_single(
            random.randint(1, utils.get_rows_count(answer_number[1])),
            answer_number[1])
        #Отсоединяемся от БД
        db_worker.close()
        #Генерируем значение пременной для дополнительного сообщения:
        chat_message = {
            '2': 'Алгоритмический язык',
            '3': 'BASIC',
            '4': 'Pascal',
            '5': 'Pyhon'
        }
        #генерируем случайные числа для шаблона программы из базы данных
        Dat = [random.randint(10, 20) for i in range(10)]
        #Генерируем вспомогательное число для сравнения или подсчета
        t = random.randint(10, 20)
        #сохраняем в переменную текст шаюблона из базы данных
        result_code = row[int(code)]
        #заменяем данные в шаблоне
        for i in range(10):
            result_code = result_code.replace('{dat' + str(int(i)) + '}',
                                              str(Dat[i]))
        result_code = result_code.replace('{t}', str(t))
        # Отправляем вводную часть вопроса
        bot.send_message(message.chat.id, row[1])
        # Отправляем основную часть вопроса c форматированием
        bot.send_message(message.chat.id,
                         '<pre>' + result_code + '</pre>',
                         parse_mode='HTML')
        # Отправляем дополнительное сообщение
        bot.send_message(
            message.chat.id,
            'Текст программы приведён на языке программирования: ' +
            chat_message[code])
        #сохраняем в переменную текст шаюблона пояснения из базы данных
        result_memorial = row[7]
        #заеняем данные в шаблоне
        result_memorial = result_memorial.replace('{t}', str(t))
        result_memorial = result_memorial.replace(
            '{answer}', utils.generate_right_answer_10(row[6], Dat, t))
        # Включаем "игровой режим"... ждем ответа от пользователя
        utils.set_user_game(message.chat.id,
                            utils.generate_right_answer_10(row[6], Dat, t),
                            result_memorial)
예제 #21
0
import telebot