def choose_groups(chat_id, to_add):
    """
    Предлагает юзеру выбрать группы для подписки/отписки
    :param chat_id: ID юзера
    :param to_add: Если True, то диалог добавления, если False - удаления
    """
    storage = Shelver(config.database_file)
    global list_of_buttons
    list_of_usergroups = storage.find_all('.*_users')
    list_of_buttons = [elem[:-6] for elem in list_of_usergroups]
    markup = types.ReplyKeyboardMarkup()
    # Позволяем ресайзить клаву
    markup.resize_keyboard = True
    # Если добавляем
    if to_add:
        for i in range(len(list_of_buttons)):
            if chat_id not in storage.get(list_of_usergroups[i]):
                markup.row('/{0}:+{1}'.format('group' + str(i), list_of_buttons[i]))
        markup.row('/0:Закрыть')
        tb.send_message(chat_id, 'Выберите нужные категории. Как закончите - нажмите "Закрыть"',
                        reply_markup=markup)
        list_users_to_subscribe.append(chat_id)
    if not to_add:
        for i in range(len(list_of_buttons)):
            if chat_id in storage.get(list_of_usergroups[i]):
                markup.row('/{0}:-{1}'.format('group' + str(i), list_of_buttons[i]))
        markup.row('/0:Закрыть')
        tb.send_message(chat_id, 'Выберите нужные категории. Как закончите - нажмите "Закрыть"',
                        reply_markup=markup)
        list_users_to_unsibscribe.append(chat_id)
def get_token():
    """
    Получает токен из локального хранилища
    :return: (str) значение токена
    """
    # Небольшой хак, чтобы хранилище всегда было в корне проекта
    storage = Shelver(os.path.join(os.path.dirname(__file__), config.database_file))
    return storage.get('token')
def is_token_valid():
    storage = Shelver(config.database_file)
    cur_time = storage.get_with_create('expire_time', 0)
    if int(time.time()) < int(cur_time):
        return True
    elif int(time.time()) > int(cur_time):
        logger.info('Token expired. Need to get new one')
        return False
def update_ids(list_of_groups):
    from shelver import Shelver
    from config import database_file
    storage = Shelver(database_file)
    for group in list_of_groups:
        import time
        time.sleep(1)
        try:
            last_id = get_first_post_id(group)
            # Если это первый запуск, то сохраняем первое же значение
            storage.get_with_create(group, last_id)
        except Exception as ex:
            logger.error('UpdateIDS failed: {0!s}'.format(ex))
示例#5
0
def get_list_of_users_in_category(list_name):
    storage = Shelver(config.database_file)
    return list(storage.get_with_create(list_name + config.users_db_postfix, []))
示例#6
0
def get_list_of_groups_in_category(category_name):
    storage = Shelver(config.database_file)
    return storage.get(category_name.strip())
示例#7
0
# -*- coding: utf-8 -*-
"""
При изменении списка групп, необходимо запустить этот файл
"""

from shelver import Shelver
from config import database_file, categories, cat_entries

list_categories = categories.split(',')
list_entries = cat_entries.split('\n')
storage = Shelver(database_file)
if len(list_categories) != len(list_entries):
    print('Размерности массивов не совпадают! Проверьте списки.')
else:
    for i in range(len(list_categories)):
        for j in range(len(list_entries[i].split(','))):
            print('Inserting {0} into {1}'.format(
                list_entries[i].split(',')[j], list_categories[i]))
            storage.append(list_categories[i],
                           list_entries[i].split(',')[j].strip(),
                           strict=False)

print(len(storage.get('Новости')[1]))
def delete_user_from_list_of_subscribers(chat_id, list_name):
    storage = Shelver(config.database_file)
    return storage.remove(list_name + config.users_db_postfix, chat_id)
def add_user_to_list_of_subscribers(chat_id, list_name):
    storage = Shelver(config.database_file)
    return storage.append(list_name + config.users_db_postfix, chat_id)
                                                           m.text[m.text.find(':') + 2:].strip())
                # list_users_to_unsibscribe.remove(m.chat.id)
                send_message_with_hide_keyboard(m.chat.id, 'Вы отписались от категории '
                                                + m.text[m.text.find(':') + 2:].strip())
        if m.text == '/0:Закрыть':
            hider = types.ReplyKeyboardHide()
            tb.send_message(m.chat.id, 'Готово!', reply_markup=hider)
            try:
                list_users_to_unsibscribe.remove(m.chat.id)
                list_users_to_subscribe.remove(m.chat.id)
            except:
                pass


# Запускаем бота
tb = telebot.TeleBot(config.token)
tb.set_update_listener(listener)
# Запускаем логгер
utils.init_logger()
tb.polling(none_stop=True, interval=4)
shelver = Shelver(config.database_file)
# Ловим сигнал прерывания
signal.signal(signal.SIGINT, signal_handler)
# В цикле запускается анализ страниц, рекомендую сделать Sleep хотя бы 2 минуты (120)
while True:
    if not utils.is_token_valid():
        auth.get_new_token()
    cycle(config.categories, shelver)
    time.sleep(config.SCANNING_INTERVAL)
    pass
def get_list_of_groups_in_category(category_name):
    storage = Shelver(config.database_file)
    return storage.get(category_name.strip())
#!/usr/bin/python3.4
# -*- coding: utf-8 -*-

from shelver import Shelver
import shelve
import config

storage = Shelver(config.database_file)
print(config.categories)
for entry in config.categories.split(','):
    storage.save(entry.strip(), [])
    storage.save(entry.strip() + config.users_db_postfix, [])

list_categories = config.categories.split(',')
list_entries = config.cat_entries.split('\n')
if len(list_categories) != len(list_entries):
    print('Размерности массивов не совпадают! Проверьте списки.')
else:
    for i in range(len(list_categories)):
        for j in range(len(list_entries[i].split(','))):
            print('Inserting {0} into {1}'.format(
                list_entries[i].split(',')[j], list_categories[i]))
            storage.append(list_categories[i],
                           list_entries[i].split(',')[j].strip(),
                           strict=True)

print(len(storage.get('News')[1]))

storage.save('expire_time', 0)
storage.save('token', 0)
storage.close()
def signal_handler(signal, frame):
    logger.info('Signal catched, closing DB')
    print('Signal catched, closing DB')
    Shelver(config.database_file).close()
    sys.exit(0)
示例#14
0
def add_user_to_list_of_subscribers(chat_id, list_name):
    storage = Shelver(config.database_file)
    return storage.append(list_name + config.users_db_postfix, chat_id)
def get_list_of_users_in_category(list_name):
    storage = Shelver(config.database_file)
    return list(storage.get_with_create(list_name + config.users_db_postfix, []))
# -*- coding: utf-8 -*-
"""
При изменении списка групп, необходимо запустить этот файл
"""

from shelver import Shelver
from config import database_file, categories, cat_entries


list_categories = categories.split(',')
list_entries = cat_entries.split('\n')
storage = Shelver(database_file)
if len(list_categories) != len(list_entries):
    print('Размерности массивов не совпадают! Проверьте списки.')
else:
    for i in range(len(list_categories)):
        for j in range(len(list_entries[i].split(','))):
            print('Inserting {0} into {1}'.format(list_entries[i].split(',')[j], list_categories[i]))
            storage.append(list_categories[i], list_entries[i].split(',')[j].strip(), strict=False)

print(len(storage.get('Новости')[1]))




#!/usr/bin/python3.4
# -*- coding: utf-8 -*-

from shelver import Shelver
import shelve
import config

storage = Shelver(config.database_file)
print(config.categories)
for entry in config.categories.split(","):
    storage.save(entry.strip(), [])
    storage.save(entry.strip() + config.users_db_postfix, [])


list_categories = config.categories.split(",")
list_entries = config.cat_entries.split("\n")
if len(list_categories) != len(list_entries):
    print("Размерности массивов не совпадают! Проверьте списки.")
else:
    for i in range(len(list_categories)):
        for j in range(len(list_entries[i].split(","))):
            print("Inserting {0} into {1}".format(list_entries[i].split(",")[j], list_categories[i]))
            storage.append(list_categories[i], list_entries[i].split(",")[j].strip(), strict=True)

print(len(storage.get("News")[1]))


storage.save("expire_time", 0)
storage.save("token", 0)
storage.close()