Exemplo n.º 1
0
def set_handlers(queue: JobQueue, bot: Bot):
    queue.run_daily(lambda _: daily_infection(get_group_chat_id(), bot),
                    DAILY_INFECTION_TIME,
                    name=JOB_QUEUE_DAILY_INFECTION_KEY)

    queue.run_repeating(lambda _: random_cough(bot, queue),
                        REPEATING_COUGHING_INTERVAL,
                        name=JOB_QUEUE_REPEATING_COUGHING_KEY)
Exemplo n.º 2
0
def set_mailing_job(job_queue: JobQueue, user_id, chat_id, language_code):
    """set new mailing job"""
    job_time, mailing_status = get_job_attrs(user_id)
    if mailing_status != consts.MAILING_ALLOWED:
        return
    job_queue.run_daily(
        callback=mailing_job,
        time=job_time,
        days=(0, 1, 2, 3, 4, 5),
        context=[user_id, chat_id, language_code],
        name=consts.MAILING_JOB,
    )
Exemplo n.º 3
0
def add_notify_event(job_queue: JobQueue, job_model: Job):
    job_name = str(job_model.chat_id) + '_' + job_model.name

    if job_model.mode == JobMode.ONCE:
        job_queue.run_once(
            callback=notify_callback,
            name=job_name,
            when=create_time(job_model.time),
        )
    elif job_model.mode == JobMode.DAILY:
        job_queue.run_daily(
            callback=notify_callback,
            name=job_name,
            time=create_time(job_model.time),
            days=(0, 2, 3, 4),  # Monday-Friday
        )
Exemplo n.º 4
0
def init(*, bot: Bot, job_queue: JobQueue, callback: callable):
    _load_all()
    _configure_logging(bot)
    for chat in auto_spins:
        job = job_queue.run_daily(callback,
                                  str_to_time(auto_spins[chat]),
                                  context=chat)
        auto_spin_jobs.update({chat: job})
Exemplo n.º 5
0
def restart_user_jobs(chat_id: int,
                      chat_data: Dict[str, Dict[str, Union[int, str, dict]]],
                      job_queue: JobQueue):
    current_jobs = job_queue.get_jobs_by_name(str(chat_id))
    for job in current_jobs:
        job.schedule_removal()

    settings = chat_data.get('settings')
    assert isinstance(settings, dict)

    num_of_words = settings.get('num_of_words')
    str_start_time = settings.get('start_time')
    str_end_time = settings.get('end_time')
    assert isinstance(num_of_words, int)
    assert isinstance(str_start_time, str)
    assert isinstance(str_end_time, str)

    start_time = time.fromisoformat(str_start_time)
    end_time = time.fromisoformat(str_end_time)

    time_interval = timedelta()
    days = 0 if start_time <= end_time else 1
    if num_of_words > 0:
        time_interval = timedelta(
            days=days,
            hours=end_time.hour - start_time.hour,
            minutes=end_time.minute - start_time.minute) / num_of_words

    job_times = []
    for i in range(num_of_words):
        job_datetime = datetime.combine(datetime.utcnow(),
                                        start_time) + i * time_interval
        job_time = job_datetime.timetz()

        job_queue.run_daily(send_word,
                            job_time,
                            context={'chat_id': chat_id},
                            name=str(chat_id),
                            job_kwargs={'misfire_grace_time': 20 * 60})

        job_times.append({'time': job_time.isoformat()})

    set_to_database(chat_id, 'jobs', job_times)

    return num_of_words
Exemplo n.º 6
0
def change_standup_job_schedule(
        jobs_queue: JobQueue, time_str: str, hour: int, minute: int,
):
    jobs_queue.stop()

    jobs = jobs_queue.jobs()
    for job in jobs:
        job.schedule_removal()

    DB().set_standup_time(time_str)

    jobs_queue.run_daily(
        callback=standup_job_handler_callback,
        time=datetime.time(hour=hour, minute=minute),
        days=(0, 1, 2, 3, 4),
    )
    jobs_queue.start()
    Logger().clear()
Exemplo n.º 7
0
def load_all(dispatcher: Dispatcher, job_queue: JobQueue) -> None:
    from .basic import (
        callback_generic,
        cmd_getid,
        cmd_start,
    )
    from .broadcast import (
        callback_broadcast,
        cmd_broadcast,
    )
    from .conversation import cmd_mention
    from .elections import load_all as load_elections_handlers
    from .groups import load_all as load_groups_handlers
    from .rooms import (
        callback_dafi,
        cmd_dafi,
        job_dafi,
    )
    from .users import load_all as load_users_handlers

    tzinfo = pytz.timezone('Europe/Madrid')

    # Basic
    dispatcher.add_handler(
        CallbackQueryHandler(callback_generic, pattern='main'))
    dispatcher.add_handler(CommandHandler('getid', cmd_getid))
    dispatcher.add_handler(CommandHandler('start', cmd_start))

    # Broadcast
    dispatcher.add_handler(
        CallbackQueryHandler(callback_broadcast, pattern='broadcast'))
    dispatcher.add_handler(CommandHandler('broadcast', cmd_broadcast))

    # Conversation
    dispatcher.add_handler(CommandHandler('mencionar', cmd_mention))

    # Rooms
    dispatcher.add_handler(CallbackQueryHandler(callback_dafi, pattern='dafi'))
    dispatcher.add_handler(CommandHandler('dafi', cmd_dafi))
    job_queue.run_daily(job_dafi, time(hour=21, minute=10, tzinfo=tzinfo))

    load_elections_handlers(dispatcher)
    load_groups_handlers(dispatcher)
    load_users_handlers(dispatcher)
Exemplo n.º 8
0
    def poll_electricity_command_handler(bot: Bot, update: Update, job_queue: JobQueue, chat_data: dict):
        context = {
            'chat_data': chat_data,
            'chat_id': update.message.chat_id
        }

        if 'polling_time' in chat_data:
            polling_time = chat_data['polling_time']
        else:
            polling_time = time(8, 0, 0)

        job = job_queue.run_daily(poll_electricity_bill, time=polling_time, context=context)
        chat_data['job'] = job

        update.message.reply_text('Poll dianfei per day!')
Exemplo n.º 9
0
def auto_spin_config(bot: Bot, update: Update, args: list,
                     job_queue: JobQueue):
    msg = update.effective_message
    if len(args) == 0:
        return
    is_moder = core.can_change_spin_name(msg.chat_id, msg.from_user.id, bot)
    cmd = args.pop(0)
    if cmd == "set" and is_moder:
        try:
            time = args[0].split(':')
            time = "{:0>2}:{:0>2}".format(time[0], time[1])
            job = job_queue.run_daily(auto_spin,
                                      core.str_to_time(time),
                                      context=msg.chat_id)
            if msg.chat_id in core.auto_spins:
                core.auto_spin_jobs[msg.chat_id].schedule_removal()
        except (ValueError, IndexError):
            msg.reply_text(
                f"Ошибка! Проверьте время на правильность и отредактируйте сообщение"
            )
            return

        core.auto_spins.update({msg.chat_id: time})
        core.auto_spin_jobs.update({msg.chat_id: job})
        msg.reply_text(
            f"Автоматический розыгрыш установлен на {time} GMT+0\n\n"
            f"ВНИМАНИЕ! Если розыгрыш уже был проведён до того, как запустится автоматический розыгрыш, то"
            f" бот не напишет ничего в чат по наступлению времени розыгрыша")
    elif cmd == 'del' and is_moder:
        if msg.chat_id in core.auto_spins:
            core.auto_spin_jobs.pop(msg.chat_id).schedule_removal()
            core.auto_spins.pop(msg.chat_id)
            msg.reply_text(
                "Теперь автоматический розыгрыш отключен в этом чате")
        else:
            msg.reply_text(
                "Автоматический розыгрыш ещё не был включен в этом чате")
    elif cmd == 'status':
        if msg.chat_id in core.auto_spins:
            msg.reply_text(f"Автоматический розыгрыш установлен в этом чате"
                           f" на {core.auto_spins.get(msg.chat_id)} GMT+0")
        else:
            msg.reply_text("Автоматический розыгрыш отключен в этом чате")
Exemplo n.º 10
0
def run_job(queue: JobQueue, message: ScheduledMessage, chat_id: int):
    if message.period == 'daily':
        insert_job_to_jobs(
            chat_id,
            queue.run_daily(
                create_scheduled_message_callback(chat_id, message),
                message.start_day.time()))
    elif message.period == 'monthly':
        insert_job_to_jobs(
            chat_id,
            queue.run_monthly(create_scheduled_message_callback(
                chat_id, message),
                              message.start_day.time(),
                              message.start_day.date().day,
                              day_is_strict=False))
    elif message.period == 'once':
        insert_job_to_jobs(
            chat_id,
            queue.run_once(create_scheduled_message_callback(chat_id, message),
                           message.start_day))
    else:
        raise RuntimeError("Something strange happen")
Exemplo n.º 11
0
def setup():
    bot = Bot(token=conf['BOT_TOKEN'])
    update_queue = Queue()
    dp = Dispatcher(bot, update_queue)
    jq = JobQueue(bot)

    # Commands for admin
    dp.add_handler(CommandHandler('start', start))
    dp.add_handler(
        CommandHandler('apod',
                       apod,
                       pass_args=True,
                       filters=Filters.user(username=conf['ADMIN'])))
    dp.add_handler(
        CommandHandler('epic',
                       epic,
                       pass_args=True,
                       filters=Filters.user(username=conf['ADMIN'])))
    dp.add_handler(
        CommandHandler('mars',
                       mars_photos,
                       pass_args=True,
                       filters=Filters.user(username=conf['ADMIN'])))
    dp.add_handler(
        CommandHandler('db',
                       test_db_command,
                       filters=Filters.user(username=conf['ADMIN'])))
    dp.add_error_handler(error)

    #
    jq.run_repeating(check_apod_updates,
                     interval=3600,
                     first=0,
                     context=make_apod_context(bot, TESTING))
    jq.run_repeating(check_epic_updates,
                     interval=3600,
                     first=15 if TESTING else 500,
                     context=make_epic_context(bot, TESTING))
    jq.run_daily(check_mars_photos_updates,
                 time=time(9),
                 context={
                     'Curiosity': 2320,
                     'Opportunity': 5111,
                     'Spirit': 2208,
                     'all': ['Curiosity', 'Opportunity', 'Spirit']
                 })

    s = bot.set_webhook(
        url='https://salty-escarpment-89606.herokuapp.com/hook/' +
        conf['BOT_TOKEN'])
    if s:
        print(s)
        logger.info('webhook setup ok')
    else:
        print(s)
        logger.info('webhook setup failed')

    thread = Thread(target=dp.start, name='dispatcher')
    thread.start()
    jq.start()

    return update_queue, bot
Exemplo n.º 12
0
class JobQueueTest(BaseTest, unittest.TestCase):
    """
    This object represents Tests for Updater, Dispatcher, WebhookServer and
    WebhookHandler
    """
    def setUp(self):
        self.jq = JobQueue(MockBot('jobqueue_test'))
        self.jq.start()
        self.result = 0
        self.job_time = 0

    def tearDown(self):
        if self.jq is not None:
            self.jq.stop()

    def job1(self, bot, job):
        self.result += 1

    def job2(self, bot, job):
        raise Exception("Test Error")

    def job3(self, bot, job):
        self.result += 1
        job.schedule_removal()

    def job4(self, bot, job):
        self.result += job.context

    def job5(self, bot, job):
        self.job_time = time.time()

    def test_basic(self):
        self.jq.put(Job(self.job1, 0.1))
        sleep(1.5)
        self.assertGreaterEqual(self.result, 10)

    def test_job_with_context(self):
        self.jq.put(Job(self.job4, 0.1, context=5))
        sleep(1.5)
        self.assertGreaterEqual(self.result, 50)

    def test_noRepeat(self):
        self.jq.put(Job(self.job1, 0.1, repeat=False))
        sleep(0.5)
        self.assertEqual(1, self.result)

    def test_nextT(self):
        self.jq.put(Job(self.job1, 0.1), next_t=0.5)
        sleep(0.45)
        self.assertEqual(0, self.result)
        sleep(0.1)
        self.assertEqual(1, self.result)

    def test_multiple(self):
        self.jq.put(Job(self.job1, 0.1, repeat=False))
        self.jq.put(Job(self.job1, 0.2, repeat=False))
        self.jq.put(Job(self.job1, 0.4))
        sleep(1)
        self.assertEqual(4, self.result)

    def test_disabled(self):
        j0 = Job(self.job1, 0.1)
        j1 = Job(self.job1, 0.2)

        self.jq.put(j0)
        self.jq.put(Job(self.job1, 0.4))
        self.jq.put(j1)

        j0.enabled = False
        j1.enabled = False

        sleep(1)
        self.assertEqual(2, self.result)

    def test_schedule_removal(self):
        j0 = Job(self.job1, 0.1)
        j1 = Job(self.job1, 0.2)

        self.jq.put(j0)
        self.jq.put(Job(self.job1, 0.4))
        self.jq.put(j1)

        j0.schedule_removal()
        j1.schedule_removal()

        sleep(1)
        self.assertEqual(2, self.result)

    def test_schedule_removal_from_within(self):
        self.jq.put(Job(self.job1, 0.4))
        self.jq.put(Job(self.job3, 0.2))

        sleep(1)
        self.assertEqual(3, self.result)

    def test_longer_first(self):
        self.jq.put(Job(self.job1, 0.2, repeat=False))
        self.jq.put(Job(self.job1, 0.1, repeat=False))
        sleep(0.15)
        self.assertEqual(1, self.result)

    def test_error(self):
        self.jq.put(Job(self.job2, 0.1))
        self.jq.put(Job(self.job1, 0.2))
        sleep(0.5)
        self.assertEqual(2, self.result)

    def test_jobs_tuple(self):
        self.jq.stop()
        jobs = tuple(Job(self.job1, t) for t in range(5, 25))

        for job in jobs:
            self.jq.put(job)

        self.assertTupleEqual(jobs, self.jq.jobs())

    def test_inUpdater(self):
        u = Updater(bot="MockBot")
        u.job_queue.start()
        try:
            u.job_queue.put(Job(self.job1, 0.5))
            sleep(0.75)
            self.assertEqual(1, self.result)
            u.stop()
            sleep(2)
            self.assertEqual(1, self.result)
        finally:
            u.stop()

    def test_time_unit_int(self):
        # Testing seconds in int
        delta = 2
        expected_time = time.time() + delta

        self.jq.put(Job(self.job5, delta, repeat=False))
        sleep(2.5)
        self.assertAlmostEqual(self.job_time, expected_time, delta=0.1)

    def test_time_unit_dt_timedelta(self):
        # Testing seconds, minutes and hours as datetime.timedelta object
        # This is sufficient to test that it actually works.
        interval = datetime.timedelta(seconds=2)
        expected_time = time.time() + interval.total_seconds()

        self.jq.put(Job(self.job5, interval, repeat=False))
        sleep(2.5)
        self.assertAlmostEqual(self.job_time, expected_time, delta=0.1)

    def test_time_unit_dt_datetime(self):
        # Testing running at a specific datetime
        delta = datetime.timedelta(seconds=2)
        next_t = datetime.datetime.now() + delta
        expected_time = time.time() + delta.total_seconds()

        self.jq.put(Job(self.job5, repeat=False), next_t=next_t)
        sleep(2.5)
        self.assertAlmostEqual(self.job_time, expected_time, delta=0.1)

    def test_time_unit_dt_time_today(self):
        # Testing running at a specific time today
        delta = 2
        next_t = (datetime.datetime.now() +
                  datetime.timedelta(seconds=delta)).time()
        expected_time = time.time() + delta

        self.jq.put(Job(self.job5, repeat=False), next_t=next_t)
        sleep(2.5)
        self.assertAlmostEqual(self.job_time, expected_time, delta=0.1)

    def test_time_unit_dt_time_tomorrow(self):
        # Testing running at a specific time that has passed today. Since we can't wait a day, we
        # test if the jobs next_t has been calculated correctly
        delta = -2
        next_t = (datetime.datetime.now() +
                  datetime.timedelta(seconds=delta)).time()
        expected_time = time.time() + delta + 60 * 60 * 24

        self.jq.put(Job(self.job5, repeat=False), next_t=next_t)
        self.assertAlmostEqual(self.jq.queue.get(False)[0],
                               expected_time,
                               delta=0.1)

    def test_run_once(self):
        delta = 2
        expected_time = time.time() + delta

        self.jq.run_once(self.job5, delta)
        sleep(2.5)
        self.assertAlmostEqual(self.job_time, expected_time, delta=0.1)

    def test_run_repeating(self):
        interval = 0.1
        first = 1.5

        self.jq.run_repeating(self.job1, interval, first=first)
        sleep(2.505)
        self.assertAlmostEqual(self.result, 10, delta=1)

    def test_run_daily(self):
        delta = 1
        time_of_day = (datetime.datetime.now() +
                       datetime.timedelta(seconds=delta)).time()
        expected_time = time.time() + 60 * 60 * 24 + delta

        self.jq.run_daily(self.job1, time_of_day)
        sleep(2 * delta)
        self.assertEqual(self.result, 1)
        self.assertAlmostEqual(self.jq.queue.get(False)[0],
                               expected_time,
                               delta=0.1)
class JobQueueTest(BaseTest, unittest.TestCase):
    """
    This object represents Tests for Updater, Dispatcher, WebhookServer and
    WebhookHandler
    """

    def setUp(self):
        self.jq = JobQueue(MockBot('jobqueue_test'))
        self.jq.start()
        self.result = 0
        self.job_time = 0

    def tearDown(self):
        if self.jq is not None:
            self.jq.stop()

    def job1(self, bot, job):
        self.result += 1

    def job2(self, bot, job):
        raise Exception("Test Error")

    def job3(self, bot, job):
        self.result += 1
        job.schedule_removal()

    def job4(self, bot, job):
        self.result += job.context

    def job5(self, bot, job):
        self.job_time = time.time()

    def test_basic(self):
        self.jq.put(Job(self.job1, 0.1))
        sleep(1.5)
        self.assertGreaterEqual(self.result, 10)

    def test_job_with_context(self):
        self.jq.put(Job(self.job4, 0.1, context=5))
        sleep(1.5)
        self.assertGreaterEqual(self.result, 50)

    def test_noRepeat(self):
        self.jq.put(Job(self.job1, 0.1, repeat=False))
        sleep(0.5)
        self.assertEqual(1, self.result)

    def test_nextT(self):
        self.jq.put(Job(self.job1, 0.1), next_t=0.5)
        sleep(0.45)
        self.assertEqual(0, self.result)
        sleep(0.1)
        self.assertEqual(1, self.result)

    def test_multiple(self):
        self.jq.put(Job(self.job1, 0.1, repeat=False))
        self.jq.put(Job(self.job1, 0.2, repeat=False))
        self.jq.put(Job(self.job1, 0.4))
        sleep(1)
        self.assertEqual(4, self.result)

    def test_disabled(self):
        j0 = Job(self.job1, 0.1)
        j1 = Job(self.job1, 0.2)

        self.jq.put(j0)
        self.jq.put(Job(self.job1, 0.4))
        self.jq.put(j1)

        j0.enabled = False
        j1.enabled = False

        sleep(1)
        self.assertEqual(2, self.result)

    def test_schedule_removal(self):
        j0 = Job(self.job1, 0.1)
        j1 = Job(self.job1, 0.2)

        self.jq.put(j0)
        self.jq.put(Job(self.job1, 0.4))
        self.jq.put(j1)

        j0.schedule_removal()
        j1.schedule_removal()

        sleep(1)
        self.assertEqual(2, self.result)

    def test_schedule_removal_from_within(self):
        self.jq.put(Job(self.job1, 0.4))
        self.jq.put(Job(self.job3, 0.2))

        sleep(1)
        self.assertEqual(3, self.result)

    def test_longer_first(self):
        self.jq.put(Job(self.job1, 0.2, repeat=False))
        self.jq.put(Job(self.job1, 0.1, repeat=False))
        sleep(0.15)
        self.assertEqual(1, self.result)

    def test_error(self):
        self.jq.put(Job(self.job2, 0.1))
        self.jq.put(Job(self.job1, 0.2))
        sleep(0.5)
        self.assertEqual(2, self.result)

    def test_jobs_tuple(self):
        self.jq.stop()
        jobs = tuple(Job(self.job1, t) for t in range(5, 25))

        for job in jobs:
            self.jq.put(job)

        self.assertTupleEqual(jobs, self.jq.jobs())

    def test_inUpdater(self):
        u = Updater(bot="MockBot")
        u.job_queue.start()
        try:
            u.job_queue.put(Job(self.job1, 0.5))
            sleep(0.75)
            self.assertEqual(1, self.result)
            u.stop()
            sleep(2)
            self.assertEqual(1, self.result)
        finally:
            u.stop()

    def test_time_unit_int(self):
        # Testing seconds in int
        delta = 2
        expected_time = time.time() + delta

        self.jq.put(Job(self.job5, delta, repeat=False))
        sleep(2.5)
        self.assertAlmostEqual(self.job_time, expected_time, delta=0.1)

    def test_time_unit_dt_timedelta(self):
        # Testing seconds, minutes and hours as datetime.timedelta object
        # This is sufficient to test that it actually works.
        interval = datetime.timedelta(seconds=2)
        expected_time = time.time() + interval.total_seconds()

        self.jq.put(Job(self.job5, interval, repeat=False))
        sleep(2.5)
        self.assertAlmostEqual(self.job_time, expected_time, delta=0.1)

    def test_time_unit_dt_datetime(self):
        # Testing running at a specific datetime
        delta = datetime.timedelta(seconds=2)
        next_t = datetime.datetime.now() + delta
        expected_time = time.time() + delta.total_seconds()

        self.jq.put(Job(self.job5, repeat=False), next_t=next_t)
        sleep(2.5)
        self.assertAlmostEqual(self.job_time, expected_time, delta=0.1)

    def test_time_unit_dt_time_today(self):
        # Testing running at a specific time today
        delta = 2
        next_t = (datetime.datetime.now() + datetime.timedelta(seconds=delta)).time()
        expected_time = time.time() + delta

        self.jq.put(Job(self.job5, repeat=False), next_t=next_t)
        sleep(2.5)
        self.assertAlmostEqual(self.job_time, expected_time, delta=0.1)

    def test_time_unit_dt_time_tomorrow(self):
        # Testing running at a specific time that has passed today. Since we can't wait a day, we
        # test if the jobs next_t has been calculated correctly
        delta = -2
        next_t = (datetime.datetime.now() + datetime.timedelta(seconds=delta)).time()
        expected_time = time.time() + delta + 60 * 60 * 24

        self.jq.put(Job(self.job5, repeat=False), next_t=next_t)
        self.assertAlmostEqual(self.jq.queue.get(False)[0], expected_time, delta=0.1)

    def test_run_once(self):
        delta = 2
        expected_time = time.time() + delta

        self.jq.run_once(self.job5, delta)
        sleep(2.5)
        self.assertAlmostEqual(self.job_time, expected_time, delta=0.1)

    def test_run_repeating(self):
        interval = 0.1
        first = 1.5

        self.jq.run_repeating(self.job1, interval, first=first)
        sleep(2.505)
        self.assertAlmostEqual(self.result, 10, delta=1)

    def test_run_daily(self):
        delta = 1
        time_of_day = (datetime.datetime.now() + datetime.timedelta(seconds=delta)).time()
        expected_time = time.time() + 60 * 60 * 24 + delta

        self.jq.run_daily(self.job1, time_of_day)
        sleep(2 * delta)
        self.assertEqual(self.result, 1)
        self.assertAlmostEqual(self.jq.queue.get(False)[0], expected_time, delta=0.1)
Exemplo n.º 14
0
                                   ec.eventRemove,
                                   pass_groups=True)
dispatcher.add_handler(eventRemove_handler)
event_handler = CommandHandler('event',
                               ec.eventAdd,
                               pass_args=True,
                               allow_edited=True)
dispatcher.add_handler(event_handler)
eventInfo_handler = RegexHandler('\/info_*', ec.eventInfo, pass_groups=True)
dispatcher.add_handler(eventInfo_handler)
logging.info('Events commands loaded correctly.')

#Jobs (Scheduler)
job_queue = JobQueue(updater.bot)
job_queue.run_daily(rmr.birthdayReminder,
                    time(hour=8, minute=0, second=0),
                    name='birthdayReminderJob')
job_queue.run_daily(rmr.eventReminder,
                    time(hour=20, minute=0, second=0),
                    name='eventWeeklyReminderJob',
                    context={
                        'monthly': False,
                        'weekly': True,
                        'daily': False,
                        'hourly': False
                    },
                    days=(6, ))
job_queue.run_daily(rmr.eventReminder,
                    time(hour=8, minute=0, second=0),
                    name='eventDailyReminderJob',
                    context={
Exemplo n.º 15
0
chat_id_handler = CommandHandler('chatid', get_your_chat_id)
walletbalance_handler = CommandHandler('walletbalance', walletbalance)
networkinfo_handler = CommandHandler('networkinfo', networkinfo)
getinfo_handler = CommandHandler('getinfo', getinfo)
listpeers_handler = CommandHandler('listpeers', listpeers)
peeraliases_handler = CommandHandler('peeraliases', peeraliases)
networkcapacity_handler = CommandHandler('capacity', networkcapacity)
num_nodes_handler = CommandHandler('nodes', num_nodes)
subscribe_handler = CommandHandler('subscribe', subscribe)
unsubscribe_handler = CommandHandler('unsubscribe', unsubscribe)
chart_handler = CommandHandler('chart', chart)

dispatcher.add_handler(start_handler)
dispatcher.add_handler(help_handler)
dispatcher.add_handler(chat_id_handler)
dispatcher.add_handler(walletbalance_handler)
dispatcher.add_handler(networkinfo_handler)
dispatcher.add_handler(getinfo_handler)
dispatcher.add_handler(listpeers_handler)
dispatcher.add_handler(peeraliases_handler)
dispatcher.add_handler(networkcapacity_handler)
dispatcher.add_handler(num_nodes_handler)
dispatcher.add_handler(subscribe_handler)
dispatcher.add_handler(unsubscribe_handler)
dispatcher.add_handler(chart_handler)

job_queue.run_daily(db_connection.send_update,
                    datetime.time(hour=18, minute=0, second=0))
job_queue.start()

updater.start_polling()