def remind(): today = datetime.datetime.now() with open("dates.json", 'r') as file: with open("dateOfOli.json", 'r') as rfile: olimps = json.load(rfile) data = json.load(file) for date, event in data.items(): s = date.split('-') newdate = datetime.datetime(int(s[0]), int(s[1]), int(s[2])) print(newdate, (newdate - today).days, event) if (newdate - today).days == 5: for text, id in event: db = SQLighter(config.database_name) oli = db.get_oly(str(id)) for user in olimps[str(id)]: bot.send_message( user, "❗Внимание❗\n\n" + oli[1] + '\n' + text + ' ' + "начнется через 5 дней!" + '\n\n' + 'Источник: ' + oli[4]) elif (newdate - today).days == 1: for text, id in event: db = SQLighter(config.database_name) oli = db.get_oly(str(id)) for user in olimps[str(id)]: bot.send_message( user, "❗Внимание❗\n\n" + oli[1] + '\n' + text + ' ' + "начнется завтра!" + '\n\n' + 'Источник: ' + oli[4])
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 play_attempt(call: CallbackQuery): status = utils.get_user_one_note_choise(call.message.chat.id) if call.data and status: # Получаем информацию о ноте note_info = call.data category_name = utils.get_user(call.message.chat.id, chosen_category=True) # Проверка выбора разыгранной/неразыгранной ноты: note_info = note_info.split(',') encoded_note_name = note_info[0] # если строка начинается с "Нота", значит нота разыграна if note_info[0].startswith("Нота"): bot.send_message(call.message.chat.id, f"{utils.choice_random_message('1.7.1')}") dbworker.set_state(call.message.chat.id, config.States.S_ENTER_NOTE.value) elif len(encoded_note_name) == 4 and len(note_info) == 3: # снижаем вероятность, если вдруг введён подменный текст в callback # Устанавливаем запрет на выбор ещё одной ноты пока пользователь ожидает цену выбранной utils.set_user_one_note_choise(call.message.chat.id, sign=False) # Получаем маркировку и колбэк-текст для всех нот в пределах категории text = utils.get_user_text(call.message.chat.id, category_name) c_data = utils.get_user_callback(call.message.chat.id, category_name) # Преобразуем маркировку и коллбэк-текст для выбранной ноты new_text_and_c_data = utils.modify_params(note_info, text, c_data) # Генерируем клаву с нотами keyboard_n_edited = utils.generate_inline_markup(new_text_and_c_data[0], new_text_and_c_data[1]) # Сохраняем обновлённый текст для формирования клавы utils.set_user_text(call.message.chat.id, category_name, new_text_and_c_data[0], sign=False) utils.set_user_callback(call.message.chat.id, category_name, new_text_and_c_data[1], sign=False) # Здесь сохраняем в хранилище новый вид клавы utils.set_user_cats_and_notes(call.message.chat.id, category_name, attincat=None, note_kb=keyboard_n_edited) # Сообщаем цену разыгрываемой ноты пользователю bot.edit_message_text("<b>А цена ноты составит..</b>", chat_id=call.message.chat.id, message_id=call.message.message_id, parse_mode='HTML', reply_markup=keyboard_n_edited) # Получаем file_id и note_name из БД price = int(note_info[1]) # Запоминаем цену выбранной ноты utils.set_user(call.message.chat.id, price=price) file_id, note_name = SQLighter(config.database_name).select_file_id_and_full_note_name(encoded_note_name) # Получаем 3 НЕправильных ответа wrong_answers = SQLighter(config.database_name).select_from_single_column(column_name="note_name", note_name=encoded_note_name, note_num=3) # Формируем разметку: wrong_answers = [n+',' for note in wrong_answers for n in note] wrong_answers = "{}{}{}".format(*wrong_answers).strip(',') markup = utils.generate_markup(note_name, wrong_answers) # Удаляем клаву с нотами после задержки (чтобы пользователь смог увидеть цену) time.sleep(1.5) bot.delete_message(call.message.chat.id, call.message.message_id) # Отправляем аудиофайл с вариантами ответа bot.send_voice(call.message.chat.id, file_id, reply_markup=markup) # Включаем "игровой режим" - записываем ожидаемый правильный ответ от пользователя utils.set_user(call.message.chat.id, estimated_answer=note_name) dbworker.set_state(call.message.chat.id, config.States.S_ENTER_ANSWER.value)
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 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 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 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 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 cmd_stat(message): stat_text = "" players_infos = SQLighter(config.database_name).select_for_cmd_stat() # список 3-х списков i = 0 user_id = message.chat.id for key, val in config.stat_.items(): if key == i: title = val stat_text += f"<b>{title}</b>\n" # выделяем жирным каждый заголовок players_info = players_infos[i] # список кортежей for _, p_i in enumerate(players_info): if user_id in p_i: # выделяем статистическую инфу для запросившего её пользователя p_i = list(p_i) p_i[0] = _+1 # заменяем ind на, фактически, место в итоговой стат. таблице p_i.remove(user_id) stat_text += "<b>{z} | {f} | {s} | {t}</b>".format(z=p_i[0], f=p_i[1], s=p_i[2], t=p_i[3]) + '\n' continue p_i = list(p_i) p_i[0] = _+1 id_in_db = p_i[1] p_i.remove(id_in_db) stat_text += "{z} | {f} | {s} | {t}".format(z=p_i[0], f=p_i[1], s=p_i[2], t=p_i[3]) + '\n' bot.send_message(user_id, stat_text, parse_mode='HTML') stat_text = "" i += 1
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 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_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 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 step_comment(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.from_user.last_name is not None: comment = message.from_user.first_name + " " + message.from_user.last_name + " \n" else: comment = message.from_user.first_name + "\n" if message.from_user.username is not None: comment += "@" + message.from_user.username + "\n\n" comment += message.text + "\n\n" + str(cur_time) db.save_comment(uid, comment, str(cur_time)) text = db.get_messages('Спасибо за отзыв') db.loyalty_decrement(uid) if len(text) > 0: text = text[0] else: text = db.get_messages('Спасибо за отзыв') print(str(datetime.fromtimestamp(time.time()).strftime('%Y-%m-%d %H:%M:%S')) + " " + uid + ': database error') admin_message = "<b>Отзыв:</b>" + "\n" + comment admins = db.get_admin_list() for i in admins: bot.send_message(i, admin_message, parse_mode='HTML') step[uid]['path'].pop() step[uid]['cur'] = step[uid]['path'][-1] m = markup(db, step[uid]['cur']) db.close() bot.send_message(message.chat.id, text, reply_markup=m, parse_mode='HTML')
def step_start(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) start_btns = db.get_buttons(step[uid]['cur']) # отрезаем смайл 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] fucking_flag = 0 for button in start_btns: if t is not None and t == button: fucking_flag = 1 step[uid]['cur'] = button step[uid]['path'].append(step[uid]['cur']) break msgs = db.get_messages(step[uid]['cur']) if len(msgs) > 0: text = msgs[0] m = markup(db, step[uid]['cur'], uid) if m is None and (t == 'Корзина' or t == 'Оформить'): step[uid]['path'].pop() step[uid]['cur'] = step[uid]['path'][-1] text = db.get_messages('recycle_empty')[0] m = markup(db, step[uid]['cur']) elif t == "Корзина": 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) + "\n\n" + msgs[1] db.close() if fucking_flag: bot.send_message(message.chat.id, text, reply_markup=m, parse_mode='HTML') else: pass else: db.close() print(str(datetime.fromtimestamp(time.time()).strftime('%Y-%m-%d %H:%M:%S')) + "| " + uid + ': database error')
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 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(): """ Данный метод считает общее количество строк в базе данных и сохраняет в хранилище. Потом из этого количества будем выбирать музыку. """ print(os.getcwd()+database_name) db = SQLighter(os.getcwd()+database_name) rowsnum1 = db.count_rows('1') rowsnum2 = db.count_rows('2') rowsnum3 = db.count_rows('3') rowsnum4 = db.count_rows('4') rowsnum5 = db.count_rows('5') rowsnum6 = db.count_rows('6') rowsnum7 = db.count_rows('7') rowsnum8 = db.count_rows('8') rowsnum9 = db.count_rows('9') rowsnum10 = db.count_rows('10') rowsnum11 = db.count_rows('11') rowsnum12 = db.count_rows('12') rowsnum13=0 rowsnum14 = db.count_rows('14') rowsnum15 = db.count_rows('15') rowsnum16 = db.count_rows('16') rowsnum17 = db.count_rows('17') rowsnum18 = db.count_rows('18') with shelve.open(os.getcwd()+shelve_name) as storage: storage['rows_count'] =[rowsnum1,rowsnum2,rowsnum3,rowsnum4,rowsnum5,rowsnum6,rowsnum7,rowsnum8,rowsnum9,rowsnum10,rowsnum11,rowsnum12,rowsnum13,rowsnum14,rowsnum15,rowsnum16,rowsnum17,rowsnum18] if debug==1: print (storage['rows_count'])
def barrel(message): cid = message.chat.id uid = message.from_user.id uname = message.from_user.username db_worker = SQLighter(config.users_db) user_photo = bot.get_user_profile_photos(uid,0,1) # getting user profile photo fid = user_photo.photos[0][0].file_id # getting user profile photo id if db_worker.check_user(uid): # if user exists if db_worker.check_barrel(uid): # if barrel_roll-gif already exists and uploaded bar_id = db_worker.get_barrel(uid) # getting file id bot.send_document(cid,bar_id) # sending barrel_roll-gif else: file_path = bot.get_file(fid).file_path # getting file_path of users profile image utils.make_barrel_roll(file_path) # making gif-animation barrel_roll = open('barrel_roll.gif', 'rb') msg = bot.send_document(cid,barrel_roll) # sending gif-animation to chat barrel_roll_id = msg.document.file_id # saving gif-animation file id db_worker.add_barrel(uid,barrel_roll_id) # saving file-id in database else: db_worker.add_user(uid,uname,fid) file_path = bot.get_file(fid).file_path utils.make_barrel_roll(file_path) barrel_roll = open('barrel_roll.gif', 'rb') msg = bot.send_document(cid, barrel_roll) barrel_roll_id = msg.document.file_id db_worker.add_barrel(uid, barrel_roll_id)
def add_addres(bot, update): chat_id = update.message.chat_id address = update.message.text if address == 'cancel': update.message.reply_text('Cancel', reply_markup=main_markup) return MAIN_MENU else: answer = str(balance(coin, address)) if 'not found' in answer or not (address.isalnum()): string = 'The address ***' + address + '*** can not be found in the explorer for the coin ***' + coin + '***\nEnter the address of the wallet' logger.warning( 'The address can not be found in the explorer for the coin for chat_id %s', chat_id) bot.send_message(chat_id=update.message.chat_id, text=string, parse_mode='MARKDOWN') return ADD_ADDRESS else: update.message.reply_text('Added coin ***' + coin + '*** with address ***' + address + '***', parse_mode='MARKDOWN', reply_markup=main_markup) # Add to DB db_worker = SQLighter(database_name) db_worker.add_address('users_address', chat_id, coin, address) db_worker.close() return MAIN_MENU
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 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 count_rows(): # Метод считает общее количество строк в БД и помещает в хранилище. Потом из этого количества будем выбирать музыку db = SQLighter(database_name) rowsnum = db.counts_rows() with shelve.open( shelve_name ) as storage: # with: Python сам берет на себя управление закрытием хранилища. 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