def main(): # Create the Updater and pass it your bot's token. token = env.must_get('TELEGRAM_BOT_TOKEN') # Initial updater # NOTE: Perfomance optimization, see https://github.com/python-telegram-bot/python-telegram-bot/wiki/Performance-Optimizations updater = Updater(token, request_kwargs={'read_timeout': 6, 'connect_timeout': 7}) # Get the dispatcher to register handlers dp = updater.dispatcher # on different commands - answer in Telegram dp.add_handler(CommandHandler("start", run_async(start))) dp.add_handler(CommandHandler("help", run_async(help))) dp.add_handler(CommandHandler("echo", run_async(echo))) dp.add_handler(CommandHandler("chatid", run_async(chat_id))) dp.add_handler(MessageHandler(Filters.status_update.new_chat_members, run_async(kick_user))) # log all errors dp.add_error_handler(error) # Start the Bot updater.start_polling() # Block until the user presses Ctrl-C or the process receives SIGINT, # SIGTERM or SIGABRT. This should be used most of the time, since # start_polling() is non-blocking and will stop the bot gracefully. updater.idle()
def test_run_async_with_args(self, dp): dp.add_handler(MessageHandler(Filters.all, run_async(self.callback_if_not_update_queue), pass_update_queue=True)) dp.update_queue.put(self.message_update) sleep(.1) assert self.received == self.message_update.message
def main(): print("\nrunning...") # define the updater updater = Updater(token=config.BOT_TOKEN, workers=7) # define the dispatcher dp = updater.dispatcher # define jobs j = updater.job_queue # this will run async the process_update dp.process_update = run_async(dp.process_update) # handlers # first start dp.add_handler( CommandHandler('start', commands.first_start, filters=Filters.private), -2) # before processing dp.add_handler(MessageHandler(Filters.all, messages.before_processing), -1) # commands dp.add_handler(CommandHandler('settings', commands.settings)) dp.add_handler(CommandHandler('vote', commands.vote, pass_args=True)) dp.add_handler(CommandHandler('start', commands.start, pass_args=True)) dp.add_handler(CommandHandler('help', commands.help)) dp.add_handler( CommandHandler( 'groupleaderboard', commands.groupleaderboard_private, filters=Filters.private, pass_args=True)) # this should come before the one for groups dp.add_handler( CommandHandler('groupleaderboard', commands.groupleaderboard, pass_args=True)) dp.add_handler( CommandHandler( 'grouprank', commands.group_rank_private, filters=Filters.private, pass_args=True)) # this should come before the one for groups dp.add_handler(CommandHandler('grouprank', commands.group_rank)) dp.add_handler(CommandHandler('leaderboard', commands.leaderboard)) dp.add_handler( CommandHandler('leadervote', leaderboards.leadervote, pass_args=True)) dp.add_handler( CommandHandler('leadermessage', leaderboards.leadermessage, pass_args=True)) dp.add_handler( CommandHandler('leadermember', leaderboards.leadermember, pass_args=True)) dp.add_handler(CommandHandler('aboutyou', commands.aboutyou)) dp.add_handler(CommandHandler('language', commands.language)) dp.add_handler(CommandHandler('region', commands.region)) dp.add_handler(CommandHandler('feedback', commands.feedback)) # private commands dp.add_handler(CommandHandler('statsusers', commands_private.stats_users)) dp.add_handler(CommandHandler('statsgroups', commands_private.stats_groups)) dp.add_handler( CommandHandler('infoid', commands_private.infoid, pass_args=True)) dp.add_handler( CommandHandler('reverseusername', commands_private.reverse_username, pass_args=True)) dp.add_handler( CommandHandler('bangroup', commands_private.ban_group, pass_args=True)) dp.add_handler( CommandHandler('unbangroup', commands_private.unban_group, pass_args=True)) # invalid command dp.add_handler( MessageHandler(Filters.command & Filters.private, utils.invalid_command)) # handle all messages not command. it's obvious because commands are handled before, # but it's more safe dp.add_handler(MessageHandler(~Filters.command, messages.processing)) # handle buttons callback dp.add_handler(CallbackQueryHandler(buttons_callback.callback_query)) # jobs j.run_repeating(cleandb.clean_db, interval=60 * 60 * 24, first=0) j.run_repeating(memberslog.members_log, interval=60 * 60 * 24, first=0) j.run_daily(digest_private.weekly_own_private, time=datetime.time(0, 0, 0), days=(0, )) j.run_daily(digest_supergroups.weekly_groups_digest, time=datetime.time(0, 0, 0), days=(0, )) # leaderboards pre-cache j.run_repeating(leaderboards.scheduling_votes_leaderboard_cache, interval=leaderboards.VotesLeaderboard.CACHE_SECONDS, first=0) j.run_repeating(leaderboards.scheduling_messages_leaderboard_cache, interval=leaderboards.MessagesLeaderboard.CACHE_SECONDS, first=0) j.run_repeating(leaderboards.scheduling_members_leaderboard_cache, interval=leaderboards.MembersLeaderboard.CACHE_SECONDS, first=0) # pre-cached users stats j.run_repeating(cache_users_stats.cache_users_stats, interval=cache_users_stats.CACHE_SECONDS, first=0) # pre-cache ranks groups j.run_repeating(cache_groups_rank.caching_ranks, interval=cache_groups_rank.CACHE_SECONDS, first=0) # check inactive groups j.run_repeating(cleandb.check_bot_inside_in_inactive_groups, interval=(60 * 60 * 24) * 2, first=0) # update cache if the week is over for cached leaderboards related to the week j.run_daily(leaderboards.scheduling_messages_leaderboard_cache, time=datetime.time(0, 0, 0), days=(0, )) j.run_daily(cache_users_stats.cache_users_stats, time=datetime.time(0, 0, 0), days=(0, )) j.run_daily(cache_groups_rank.caching_ranks, time=datetime.time(0, 0, 0), days=(0, )) # handle errors dp.add_error_handler(error) updater.start_polling() updater.idle()