def send_test_messages(message): fullt = message.text[7:len(message.text)].split(',') # text1 text2 text3 #sidea = message.text[7:len(message.text)] if len(fullt[0].strip(' ')) < 2: bot.send_message(message.chat.id, 'Неправильный синтаксис команды. /addya [значение]') return db_worker = SQLighter(config.database_name) db_worker.TableExists(message.chat.id) for text in fullt: sidea = text.strip(' ') side, lang = Utils.yatranslate(sidea) #lang=1 eng, lang=0 ru sidea какой первый язык if lang == 1: sideb = side else: sideb = sidea sidea = side if sidea == sideb : bot.send_message(message.chat.id, 'Корректный перевод не удался. Возможно ошибка в написании: '+sidea+' <> '+sideb) # здесь проверяем есть ли запись в базе, если нет то добавляем sidea всегда ENG SideA_in_DB = db_worker.FindSideA(sidea,message.chat.id) if len(SideA_in_DB) == 0: # если не нашел запись в базе db_worker.AddCardstoDB(str(db_worker.getlastid(message.chat.id)+1),sidea.lower(),sideb.lower(),message.chat.id) # создаем новую запись id last+1 Utils.count_rows(message.chat.id) bot.send_message(message.chat.id, 'Новая карточка ['+sidea+' - '+sideb+'] успешно добавлена. Текущее кол-во карточек: '+str(Utils.count_rows(message.chat.id))) else: # если нашел то добавить перевод в уже существующую (если еще нет такого перевода!!!!) SideA_in_DB = SideA_in_DB[0] if Utils.FindSideB(sideb,SideA_in_DB[2]) == 1: bot.send_message(message.chat.id, 'Карточка ['+sidea+' - '+SideA_in_DB[2]+ '] уже существует') else: db_worker.UpdateSideB(SideA_in_DB[0],(SideA_in_DB[2]+'; '+sideb.lower()),message.chat.id) Utils.count_rows(message.chat.id) bot.send_message(message.chat.id, 'Карточка ['+sidea+' - '+SideA_in_DB[2]+'; '+sideb+'] успешно обновлена. Текущее кол-во карточек: '+str(Utils.count_rows(message.chat.id))) 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 choose_category(message): # Добавляем исполнителя, о котором написал пользователь SQLighter(config.database_name).update_for_user(message.chat.id, message.text, column_name="performer") bot.send_message(message.chat.id, f"{utils.choice_random_message('1.4')} {message.text}") time.sleep(1) bot.send_message(message.chat.id, f"{utils.choice_random_message('1.5')}") # Получаем имена категорий categories = SQLighter(config.database_name).select_from_single_column(category_num=4) # Создаём клаву с категориями keyboard_c = utils.generate_inline_markup(categories, categories, category=True) # Сохраняем клаву с категориями на время игры utils.set_user(message.chat.id, cat_kb=keyboard_c) # Формируем "табло игры" - соответствие 4-х нот конкретной категории for category in categories: # попробовать уйти от цикла # Получаем 4 ноты с ценами note_and_price = SQLighter(config.database_name).select_from_multiple_column("category_name", *category) # Подготовка содержимого параметра callback_data объекта InlineKeyboardButton note_price_ind = utils.encode_notes(*note_and_price) # Запоминаем содержимое параметров text & callback_data label_text = [('Нота 1', ), ('Нота 2', ), ('Нота 3', ), ('Нота 4', )] utils.set_user_text(message.chat.id, *category, label_text, sign=True) utils.set_user_callback(message.chat.id, *category, note_price_ind, sign=True) # Создаём клаву с нотами keyboard_n = utils.generate_inline_markup(label_text, note_price_ind) # Сохраняем клаву с нотами и количеством попыток в пределах категории utils.set_user_cats_and_notes(message.chat.id, *category, attincat=0, note_kb=keyboard_n) bot.send_message(message.chat.id, f"{utils.choice_random_message('1.6')}", reply_markup=keyboard_c) dbworker.set_state(message.chat.id, config.States.S_ENTER_CATEGORY.value)
def delete_address(bot, update): chat_id = update.message.chat_id coin_address = update.message.text if coin_address == 'cancel': bot.send_message(chat_id=update.message.chat_id, text='Cancel', reply_markup=main_markup) return MAIN_MENU else: try: split_string = coin_address.split( ) # Separation of the received line coin = split_string[0] address = split_string[2] # Delete from DB db_worker = SQLighter(database_name) answer = db_worker.delete_row('users_address', chat_id, coin, address) db_worker.close() update.message.reply_text(answer, reply_markup=main_markup) return MAIN_MENU except: update.message.reply_text( 'Invalid input format. The string format should be:\n`coin - address`', parse_mode='MARKDOWN', reply_markup=cancel_markup) return DELETE_ADDRESS
def count_handler(message): uid = str(message.from_user.id) cur_time = datetime.fromtimestamp(time.time()).strftime('%Y-%m-%d %H:%M:%S') print(str(cur_time) + " | " + uid + ": " + message.text) db = SQLighter(config.database_name) if message.text.isdigit() and int(message.text) >= 1: request[uid]['count'] = int(message.text) request[uid]['price'] = db.get_product_info(request[uid]['name'])['price'][request[uid]['size']] if len(db.get_product_info(request[uid]['name'])['price']) != 1: if request[uid]['size'] == 0: request[uid]['name'] += " , Большая " elif request[uid]['size'] == 1: request[uid]['name'] += " , Маленькая " db.save_to_recycle(uid, request[uid]['name'], request[uid]['price'], request[uid]['count'], int(request[uid]['price']) * int(request[uid]['count'])) text = db.get_messages('added_to_recycle')[0] + "\n\n" + db.get_messages('start_more')[0] step[uid]['cur'] = 'start' step[uid]['path'] = ['start'] del request[uid] m = markup(db, step[uid]['cur'], uid) db.close() bot.send_message(message.chat.id, text, reply_markup=m, parse_mode='HTML')
def activity(self): db_worker = SQLighter(config.database_name) rows = db_worker.count_rows() rand_val = rand.randint(1, rows) msg = db_worker.select_single(rand_val) self.bot.send_message(msg[2], msg[1]) db_worker.close()
def cmd_save_text(message): if len(message.text) > 1000: bot.send_message(message.chat.id, config.lang.s_error_note_too_long) return None global offset_storage # Check, if message starts with bot mention. If yes -> remove it if message.text.startswith(r'@'): message.text = ' '.join(message.text.split()[1:]) # Convert user's time to server's local time to set "at" command taking offset into account time_to_set = utils.convert_user_time_to_at_command(utils.get_time_storage().get(str(message.chat.id)), offset_storage.get(key=str(message.chat.id))) logger.debug('User {0!s} is going to set time: {1!s}'.format( str(message.from_user.username) + ' (' + str(message.chat.id) + ')', time_to_set)) # Get Unixtime to set to SQLite DB unixtime_to_save_to_db = utils.convert_user_time_to_local_timestamp(utils.get_time_storage().get(str(message.chat.id)), offset_storage.get(str(message.chat.id))) # Set "at" command and recieve Job ID from it job_id = systemtools.set_new_at_job(message.chat.id, time_to_set, message.text.replace('"', r'\"')) # Probably this is not the best choice, because some errors can have "job" word in them # If not job id provided (error happened or something else) if not job_id: bot.send_message(message.chat.id, config.lang.s_error_could_not_save_note) return None logger.info('Successfully set reminder #{0!s} at {1!s}'.format(job_id, time_to_set)) # Insert new row in table mydb = SQLighter(config.database_schedules_file) mydb.insert(message.chat.id, unixtime_to_save_to_db, job_id) mydb.close() bot.send_message(message.chat.id, config.lang.s_common_note_added.format( utils.get_time_storage().get(str(message.chat.id)))) # After setting note, reset to START set_new_state(message.chat.id, StateMachine.States.STATE_START)
def start(bot, update, chat_data): ch_id = update.message.chat_id db_worker = SQLighter(config.database_name) cur_user = (ch_id, ) print(cur_user) exist = db_worker.searh_user() print(exist) if cur_user in exist: print("С возвращением!") else: db_worker.new_user(update.message.chat_id) markup = telegram.ReplyKeyboardMarkup(config.start_keyboard) bot.send_message(chat_id=update.message.chat_id, text='This is tomato timer. Please, choose any option.', reply_markup=markup) dp.remove_handler(not_started) dp.add_handler( RegexHandler("^(Work)$", work_timer, pass_chat_data=True, pass_job_queue=True)) dp.add_handler( RegexHandler("^(Rest)$", rest_timer, pass_chat_data=True, pass_job_queue=True)) dp.add_handler( RegexHandler("^(Send Feedback)$", feedback_handler, pass_chat_data=True)) dp.add_handler(RegexHandler("^(Settings)$", settings_handler)) dp.add_handler(RegexHandler("^(Stop)$", unset, pass_chat_data=True))
def start_message(message): # обрезка команды в тексте пользователя short_url_account = message.text[7:] # проверка на правильность ввода команды if len(short_url_account) == 0: bot.send_message(message.chat.id, 'Введите адрес аккаунта') return # проверка на ввод полной ссылки или краткой if '/' or ' ' in short_url_account: short_url_account = str_clear(short_url_account) # проверка на существование аккаунта if check_account(short_url_account) == False: bot.send_message(message.chat.id, 'Неккоректный адрес аккаунта') return # запись имени пользователя username = message.from_user.username # запись имени отслежимаемого аккаунта track_accouunt = message.text[6:] # поиск ссылки последнего поста в html коде link_last_post = find_link_last_post(short_url_account) # поиск ссылки последней истории в html коде link_last_story = find_link_last_story(short_url_account) print('1-' + username + '\n') print('1-' + track_accouunt + '\n') print('1-' + link_last_post + '\n') print('1-' + link_last_story + '\n') bot.send_message(message.chat.id, '1-' + username + '\n2-' + track_accouunt) # Подключаемся к БД db_worker = SQLighter(config.database_name) # Отсоединяемся от БД 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 callback_query(call): chat_id = call.message.chat.id base = SQLighter(config.database_name) player = base.select_single(chat_id) i = int(call.data[0]) j = int(call.data[1]) if not utils.update_board(chat_id, i, j, True): bot.answer_callback_query(call.id, 'Выберите пустую ячейку!') else: if utils.check_win(chat_id): bot.send_message(chat_id, 'Поздравляю, ты победил(а)!') return elif player[2] == 8: bot.send_message(chat_id, 'Победила дружба!') return utils.bot_move(chat_id) if utils.check_win(chat_id): bot.send_message(chat_id, 'К сожалению, ты проиграл!') return elif player[2] == 7: bot.send_message(chat_id, 'Победила дружба!') return global prev_msg if prev_msg != '': bot.delete_message(chat_id, prev_msg) msg = bot.send_message(chat_id, 'Твой ход!', reply_markup=utils.create_markup(chat_id)) prev_msg = msg.message_id
def send_new_posts_from_web(items, sourse_site): db = SQLighter(DATABASE) last_id = None for key, item in items['text'].items(): if db.add_event((key, SOURCES[sourse_site])): body = '\n'.join(item) target_group = items['target_level'][key] target_news = items['target_news'][key] text = '#{}\n{} {}\n{}'.format(sourse_site, target_group, target_news, body) target_level = str( text_worker.get_target_group([body], described=False)[0]) target_news = str( text_worker.get_news_group([body], described=False)[0]) bot.send_message( CHANNEL_NAME, text, disable_notification=is_news_irrelevant(target_news)) text_worker.write_text_to_json(key, target_level=target_level, target_news=target_news, text=[body]) else: logging.info('New last_id (website) in public {!s} is {!s}'.format( sourse_site, key)) break time.sleep(1) return
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 count_rows(): """Count amount of rows in database and save in storage. Then chose music among them""" db = SQLighter(database_name) rowsnum = db.count_rows() with shelve.open(shelve_name) as storage: storage["rows_count"] = rowsnum
def start_handler(message): uid = str(message.from_user.id) # cur_time = datetime.fromtimestamp(time.time()).strftime('%Y-%m-%d %H:%M:%S') # print(str(cur_time) + " | " + uid + ": " + message.text) db = SQLighter(config.database_name) step[uid] = {'cur': '', 'path': []} step[uid]['path'].append('start') step[uid]['cur'] = 'start' full_name = message.from_user.first_name if message.from_user.last_name is not None: full_name += " " + message.from_user.last_name if not db.has_user(uid): username = '' if message.from_user.username is None else message.from_user.username db.save_user_info(uid, full_name, username, '') lst = db.get_messages(step[uid]['cur']) if lst: text = lst[0].format(full_name) + "\n" + lst[1] m = markup(db, step[uid]['cur']) db.close() bot.send_message(message.chat.id, text, reply_markup=m, parse_mode='HTML') else: db.close() print(str(datetime.fromtimestamp(time.time()).strftime('%Y-%m-%d %H:%M:%S')) + " " + uid + ': database error')
def count_rows(): # Метод считает общее количество строк в БД и помещает в хранилище. Потом из этого количества будем выбирать музыку db = SQLighter(database_name) rowsnum = db.counts_rows() with shelve.open( shelve_name ) as storage: # with: Python сам берет на себя управление закрытием хранилища. storage['rows_count'] = rowsnum
def choose_photo(message): type_of_cntent = 'photo' db_worker = SQLighter(config.database_name2) row = db_worker.select_single(random.randint(1, Base_of_data.get_rows_count(type_of_cntent='photo'))) markup = Base_of_data.generate_markup(row[2], row[3]) bot.send_photo(message.chat.id, row[1], reply_markup=markup) Base_of_data.set_user_game(message.chat.id, row[2]) db_worker.close()
def game(message): type_of_cntent = 'music' db_worker = SQLighter(config.database_name) row = db_worker.select_single(random.randint(1, Base_of_data.get_rows_count(type_of_cntent))) markup = Base_of_data.generate_markup(row[2], row[3]) bot.send_voice(message.chat.id, row[1], reply_markup=markup, duration=20) Base_of_data.set_user_game(message.chat.id, row[2]) db_worker.close()
def reset_day(): try: db_worker = SQLighter(config.database_name) db_worker.reset_day() except Exception as e: logging.error(e) logging.info(u'Reset module ended')
def send_test_messages(message): new_delay = message.text[(message.text.find(' ')+1):len(message.text)] db_worker = SQLighter(config.database_name) db_worker.TableExists(message.chat.id) auto_delay, auto_starttime, auto_endtime, auto_enabled = db_worker.LoadSettings(message.chat.id) db_worker.SaveSettings(message.chat.id,new_delay,auto_starttime, auto_endtime, auto_enabled) db_worker.close() bot.send_message(message.chat.id, '#Settings: set auto_delay to ' + str(new_delay))
def count_rows(): """ Данный метод достает из базы общее колличество строк с вопросами и сохраняет их в хранилище """ db = SQLighter(database_name) rowsnum = db.count_rows() with shelve.open(shelve_name) as storage: storage['row_count'] = rowsnum
def send_test_messages(message): db_worker = SQLighter(config.database_name) db_worker.TableExists(message.chat.id) sidea = message.text[11:(message.text.find(' ', 5))] sideb = message.text[((message.text.find(' ', 5))+1):len(message.text)] db_worker.AddCardstoDB(str(db_worker.getlastid(message.chat.id)+1),sidea.lower(),sideb.lower(),message.chat.id) Utils.count_rows(message.chat.id) bot.send_message(message.chat.id, 'Новая карточка ['+sidea+' - '+sideb+'] успешно добавлена. Текущее кол-во карточек: '+str(Utils.count_rows(message.chat.id))) db_worker.close()
def go(message, enable): db_worker = SQLighter(config.database_name) db_worker.TableExists(message.chat.id) auto_delay, auto_starttime, auto_endtime, auto_enabled = db_worker.LoadSettings(message.chat.id) db_worker.close() if (str(auto_enabled) == '1') and (datetime.now().hour > auto_starttime) and (datetime.now().hour < auto_endtime) : # try if thread isnot alive and /auto is ON checkcard(message) # запускаем ф-ю /n с последним message (оттуда берем message.chat.id) if enable == 1: threading.Timer(auto_delay, lambda: go(message,1)).start()
def count_rows(): """ It counts rows in database :return: rows number """ db = SQLighter(database_name) rowsnum = db.count_rows() with shelve.open(shelve_name) as storage: storage['rows_count'] = rowsnum
def count_rows(): """ Данный метод считает общее количество строк в базе данных и сохраняет в хранилище. Потом из этого количества будем выбирать музыку. """ db = SQLighter(database_name) rowsnum = db.count_rows() with shelve.open(shelve_name) as storage: storage['rows_count'] = rowsnum
def start(message): chat_id = message.chat.id base = SQLighter(config.database_name) if not base.check_player(chat_id): base.insert_player(chat_id) text = u"Привет! Я учебный игровой бот. Давай сыграем в крестики-нолики?\nДля начала игры введи /play.\nДля просмотра команд введи /help." bot.send_message(chat_id, text)
def send_test_messages(message): db_worker = SQLighter(config.database_name) db_worker.TableExists(message.chat.id) sidea = message.text[6:len(message.text)] if len(db_worker.FindSideA(sidea,message.chat.id)) == 0: bot.send_message(message.chat.id, 'Указанной карточки не существует.') else: db_worker.delete_from_DB(sidea.lower(),message.chat.id) bot.send_message(message.chat.id, sidea+' успешно удалено.') db_worker.close()
def SQLInsertTest1(): db_worker = SQLighter(config.database_name) obj = Record("Insert Test 1 message", 0001, 0000, 1000) msg = db_worker.insert_single(obj) db_worker.close() return "Complete"
def clear_item(message): uid = str(message.from_user.id) cur_time = datetime.fromtimestamp(time.time()).strftime('%Y-%m-%d %H:%M:%S') print(str(cur_time) + " | " + uid + ": delete " + message.text) db = SQLighter(config.database_name) db.delete_request(uid, message.text) text = db.get_messages('Оплата')[0].format(message.text) + "\n" total = 0 reqs = db.get_requests(uid) if len(reqs) == 0: text = db.get_messages('recycle_empty')[0] step[uid]['path'].pop() step[uid]['cur'] = step[uid]['path'][-1] m = markup(db, step[uid]['cur']) else: for i in reqs: if len(i) >= 3: text += str(i[0]) + ", " + str(i[1]) + " x " + str(i[2]) + "\n" total += int(i[1]) * int(i[2]) text += "\nВсего: {} сум".format(total) m = markup(db, step[uid]['cur'], uid) db.close() bot.send_message(message.from_user.id, text, reply_markup=m, parse_mode='HTML')
def comment_handle(message): uid = str(message.from_user.id) cur_time = datetime.fromtimestamp(time.time()).strftime('%Y-%m-%d %H:%M:%S') print(str(cur_time) + " | " + uid + ": " + message.text) db = SQLighter(config.database_name) if db.has_user(uid): t = '' if len(message.text.split(' ')) > 2: for i in message.text.split(' ')[1:]: t += i + ' ' t = t[:-1] else: t = message.text.split(' ')[-1] step[uid]['cur'] = t step[uid]['path'].append(step[uid]['cur']) text = db.get_messages(step[uid]['cur']) if len(text) > 0: text = text[0] m = markup(db, step[uid]['cur']) db.close() bot.send_message(message.chat.id, text, reply_markup=m, parse_mode='HTML') else: db.close() print( str(datetime.fromtimestamp(time.time()).strftime('%Y-%m-%d %H:%M:%S')) + " " + uid + ': database error') else: text = db.get_messages('Невозможно оставить отзыв')[0] bot.send_message(message.chat.id, text, parse_mode='HTML')
def schedule_on_day_answer(message): """ Метод возвращает кастомную клавиатуру с датами """ db_worker = SQLighter(config.db_name) dates_from_db = db_worker.get_dates() dates = [] for date in dates_from_db: dates.append(date[0]) markup = utils.generate_markup(dates) bot.send_message(message.chat.id, 'Выберите дату: ', reply_markup=markup) db_worker.close()
def random_workout(message, markup): db_worker = SQLighter(config.database_name) row = db_worker.get_rand() if message.text == "": pass else: bot.send_message(message.chat.id, row[4]) bot.send_message(message.chat.id, row[3]) bot.send_document(message.chat.id, row[1], reply_markup=markup) # 2 arguement = FILE_ID time.sleep(3) db_worker.close()
def callback_query(message): chat_id = message.chat.id base = SQLighter(config.database_name) if message.text == 'Крестик' or message.text == 'Нолик': base.update_badge(chat_id, (1 if message.text == 'Крестик' else 0)) utils.clear_board(chat_id) msg = bot.send_message(chat_id, 'Твой ход!', reply_markup=utils.create_markup(chat_id)) global prev_msg prev_msg = msg.message_id
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 SQLSelectTest1(): db_worker = SQLighter(config.database_name) fire_time = 1000 list = db_worker.select_fire_list(fire_time) db_worker.close() print(list) return "Complete"
def game(message): db_worker = SQLighter(config.database_name) if db_worker.check_new_user(message.chat.id) == False: db_worker.save_user(message.chat.id) else: db_worker.reset_user(message.chat.id) next_song(message) 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 rest_timer(bot, update, job_queue, chat_data): config.start_keyboard[0][1] = 'Stop' markup = telegram.ReplyKeyboardMarkup(config.start_keyboard) chat_id = update.message.chat_id db_worker = SQLighter(config.database_name) due = float(db_worker.select_rest(update.message.chat_id).fetchone()[0]) job = job_queue.run_once(alarm, due * 60, context=chat_id) chat_data['job'] = job bot.send_message(text='Now you can rest {:.7g} minutes.'.format( float(due)), chat_id=chat_id, reply_markup=markup)
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): # Подключаемся к БД 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 checkanswer(message): # Подключаемся к БД Right = 0 db_worker = SQLighter(config.database_name) db_worker.TableExists(message.chat.id) auto_delay, auto_starttime, auto_endtime, auto_enabled = db_worker.LoadSettings(message.chat.id) if Utils.count_rows(message.chat.id) == 0: bot.send_message(message.chat.id, 'Нет ни одной карточки') db_worker.close() return rowid,colid= db_worker.get_last_rowid(message.chat.id) row = db_worker.select_single(rowid,message.chat.id) # ищем строку исп. последней # смотрим какую сторону карточки проверяем if colid == 2: # если сторону B то надо проверять все вхождения for answ in row[colid].split(';'): if message.text.upper() == answ.upper().strip(' '): Right = 1 #ответили правильно else: if message.text.upper() == row[colid].upper(): # проверяем ответ Right = 1 # Отсоединяемся от БД db_worker.close() if Right == 1: bot.send_message(message.chat.id, 'Правильно!') if (auto_enabled == '0'): checkcard(message) else: bot.send_message(message.chat.id, 'Неправильно!')
def cmd_new_alarm(message): mydb = SQLighter(config.database_schedules_file) # If not in VIP list - exit if mydb.count_entries_for_id(message.chat.id) == 5 and int(message.chat.id) not in config.vip_list: bot.send_message(message.chat.id, config.lang.s_error_maximum_number_of_notes) mydb.close() return None set_new_state(message.chat.id, StateMachine.States.STATE_NEWALARM) # if user haven't set timezone - ask him to set one if not offset_storage.exists(str(message.chat.id)): logger.debug('User {0!s} is going to set new alarm. It\'s his first appear'.format( str(message.from_user.username) + ' (' + str(message.chat.id) + ')')) set_new_state(message.chat.id, StateMachine.States.STATE_SETTING_TIMEZONE_FOR_ALARM) bot.send_message(message.chat.id, config.lang.s_common_guide_timezone) # if we already have his timezone saved - ask him to set time else: logger.debug('User {0!s} is going to set new alarm. He has been here before'.format( str(message.from_user.username) + ' (' + str(message.chat.id) + ')')) set_new_state(message.chat.id, StateMachine.States.STATE_SETTING_TIME) bot.send_message(message.chat.id, config.lang.s_common_guide_time)
def send_test_messages(message): global threads db_worker = SQLighter(config.database_name) db_worker.TableExists(message.chat.id) auto_delay, auto_starttime, auto_endtime, auto_enabled = db_worker.LoadSettings(message.chat.id) print if str(auto_enabled) == '0': bot.send_message(message.chat.id, 'Автоповторение запущено (каждые '+str(auto_delay)+' сек с '+str(auto_starttime)+' часов до '+ str(auto_endtime)+' часов)') db_worker.SaveSettings(message.chat.id,auto_delay,auto_starttime, auto_endtime, 1) go(message,1) # threads.append([]) # t = threading.Timer(auto_delay, lambda: go(message)) # creating thread # threads[len(threads)-1].append(message.chat.id) # threads[len(threads)-1].append(t) # t.start() elif str(auto_enabled) == '1': bot.send_message(message.chat.id, 'Автоповторение отключено') db_worker.SaveSettings(message.chat.id,auto_delay,auto_starttime, auto_endtime, 0) go(message,0) # for thr in threads: # if thr[0] == message.chat.id: # thr[1].cancel() # thr.remove db_worker.close()
def send_test_messages(message): db_worker = SQLighter(config.database_name) db_worker.TableExists(message.chat.id) if Utils.count_rows(message.chat.id) == 0: bot.send_message(message.chat.id, 'Нет ни одной карточки') db_worker.close() return rowid,colid= db_worker.get_last_rowid(message.chat.id) row = db_worker.select_single(rowid,message.chat.id) # ищем строку исп. последней Utils.GetVoice(row[1]) voice = open('yasound.ogg', 'rb') bot.send_voice(message.chat.id, voice) # Отсоединяемся от БД db_worker.close()
def SQLUpdateTest1(): db_worker = SQLighter(config.database_name) fire_time = 1000 list = db_worker.select_fire_list(fire_time) for obj in list: print(obj.period) obj.firetime += obj.period db_worker.update_fire_list(list) list = db_worker.select_fire_list(fire_time+100) db_worker.close() print(list) return "Complete"
def send_test_messages(message): db_worker = SQLighter(config.database_name) db_worker.TableExists(message.chat.id) if Utils.count_rows(message.chat.id) == 0: bot.send_message(message.chat.id, 'Нет ни одной карточки') db_worker.close() return rowid,colid= db_worker.get_last_rowid(message.chat.id) row = db_worker.select_single(rowid,message.chat.id) # ищем строку исп. последней help_answer = row[Utils.reverse(colid)] for a in help_answer: if random.randint(1,2) == 1: help_answer = help_answer.replace(a,'.') bot.send_message(message.chat.id, 'Подсказка: '+ help_answer) # Отсоединяемся от БД db_worker.close()
def send_test_messages(message): global auto_start db_worker = SQLighter(config.database_name) db_worker.TableExists(message.chat.id) auto_delay, auto_starttime, auto_endtime, auto_enabled = db_worker.LoadSettings(message.chat.id) if Utils.count_rows(message.chat.id) == 0: bot.send_message(message.chat.id, 'Нет ни одной карточки') db_worker.close() return rowid,colid = db_worker.get_last_rowid(message.chat.id) row = db_worker.select_single(rowid,message.chat.id) # ищем строку исп. последней bot.send_message(message.chat.id, 'Правильный ответ: '+row[Utils.reverse(colid)]) # Отсоединяемся от БД db_worker.close() if (auto_enabled == '0'): checkcard(message)
def checkcard(message): # Подключаемся к БД db_worker = SQLighter(config.database_name) db_worker.TableExists(message.chat.id) # Получаем случайную строку из БД if Utils.count_rows(message.chat.id) == 0: bot.send_message(message.chat.id, 'Нет ни одной карточки') db_worker.close() return colid = random.randint(1,2) # выбираем случайный столбец англ\рус (поставить тут условие в настройках) row = db_worker.select_random(message.chat.id) # присваеваем переменной случайную строку из БД #Utils.setrID(row[0],rrow) # запиываем какую строку и сторону использовали db_worker.set_last_rowid(message.chat.id, row[0],colid) # записываем в базу id строки и колонку if colid == 2: #Если столбец второй, с русским переводом то берем одно из значений sideb_list = row[colid].split(';') # разбили строку по ; в лист bot.send_message(message.chat.id, '# '+sideb_list[random.randint(1,len(sideb_list))-1]) else: bot.send_message(message.chat.id, '# '+row[colid]) # отправляем sidea целиком # Отсоединяемся от БД db_worker.close()
def doit(message): if len(message.text.split()) > 1: msg = message.text.split()[1] db_worker = SQLighter(config.database_name) db_worker.insert_single(message.chat.id, msg) db_worker.close()
def count_rows(tname): db = SQLighter(database_name) rowsnum = db.count_rows(tname) with shelve.open(shelve_name) as storage: storage['rows_count'] = rowsnum return rowsnum
#!/usr/bin/python3.4 # -*- coding: utf-8 -*- """ Removes outdated entries from DB (used to lower usage count) """ from config import database_schedules_file, log_name from SQLighter import SQLighter from time import time db = SQLighter(database_schedules_file) import logging logger = logging.getLogger(log_name) logging.basicConfig(filename=log_name + '.log', format='[%(asctime)s] OLD_REMOVER %(levelname)s - %(message)s', datefmt='%d.%m.%Y %H:%M:%S') logger.setLevel(logging.INFO) try: number_of_deleted = db.delete_old(int(time())).rowcount logger.info('Finished processing old rows. Rows deleted: {0!s}'.format(number_of_deleted)) except Exception as ex: logger.error('Failed to process old rows: {0!s}'.format(str(ex)))