Exemplo n.º 1
0
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])
Exemplo n.º 2
0
Arquivo: bot.py Projeto: Padking/tgbot
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)
Exemplo n.º 3
0
Arquivo: bot.py Projeto: Padking/tgbot
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)
Exemplo n.º 4
0
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))
Exemplo n.º 5
0
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
Exemplo n.º 6
0
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
Exemplo n.º 7
0
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
Exemplo n.º 8
0
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)
Exemplo n.º 9
0
Arquivo: bot.py Projeto: Padking/tgbot
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
Exemplo n.º 11
0
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()
Exemplo n.º 12
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()
Exemplo n.º 13
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()
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')
Exemplo n.º 20
0
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'])
Exemplo n.º 21
0
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
Exemplo n.º 23
0
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()
Exemplo n.º 24
0
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()
Exemplo n.º 25
0
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')
Exemplo n.º 26
0
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()           
Exemplo n.º 27
0
def count_rows():
    # Метод считает общее количество строк в БД и помещает в хранилище. Потом из этого количества будем выбирать музыку
    db = SQLighter(database_name)
    rowsnum = db.counts_rows()
    with shelve.open(
            shelve_name
    ) as storage:  # with: Python сам берет на себя управление закрытием хранилища.
        storage['rows_count'] = rowsnum
Exemplo n.º 28
0
def count_rows():
    """
    Данный метод считает общее количество строк в базе данных и сохраняет в хранилище.
    Потом из этого количества будем выбирать музыку.
    """
    db = SQLighter(database_name)
    rowsnum = db.count_rows()
    with shelve.open(shelve_name) as storage:
        storage['rows_count'] = rowsnum