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()
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()
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()
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()
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()
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)
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()
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()
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
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()
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()
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()
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()
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()
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()
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()
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'])
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)
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)
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)
import telebot