def __list_all_modules(): import glob from os.path import basename, dirname, isfile # This generates a list of modules in this folder for the * in __main__ to # work. mod_paths = glob.glob(dirname(__file__) + "/*.py") all_modules = [ basename(f)[:-3] for f in mod_paths if isfile(f) and f.endswith(".py") and not f.endswith("__init__.py") ] if LOAD or NO_LOAD: to_load = LOAD if to_load: if not all( any(mod == module_name for module_name in all_modules) for mod in to_load ): LOGGER.error("Invalid loadorder names. Quitting.") sys.exit(1) else: to_load = all_modules if NO_LOAD: LOGGER.info("Not loading: {}".format(NO_LOAD)) return [item for item in to_load if item not in NO_LOAD] return to_load return all_modules
def error_handler(update, context): """Log the error and send a telegram message to notify the developer.""" # Log the error before we do anything else, so we can see it even if something breaks. LOGGER.error( msg="Exception while handling an update:", exc_info=context.error ) if isinstance(context.error, SQLAlchemyError) or isinstance( context.error, DBAPIError ): return # traceback.format_exception returns the usual python message about an exception, but as a # list of strings rather than a single string, so we have to join them together. else: tb_list = traceback.format_exception( None, context.error, context.error.__traceback__ ) tb_string = "".join(tb_list) # Build the message with some markup and additional information about what happened. # You might need to add some logic to deal with messages longer than the 4096 character limit. message = ( f"An exception was raised while handling an update\n" f"update = {(json.dumps(update.to_dict(), indent=2, ensure_ascii=False))}" "\n\n" f"context.chat_data = {(str(context.chat_data))}\n\n" f"context.user_data = {(str(context.user_data))}\n\n" f"{(tb_string)}" ) key = ( requests.post( "https://nekobin.com/api/documents", json={"content": message} ) .json() .get("result") .get("key") ) markup = InlineKeyboardMarkup( [ [ InlineKeyboardButton( "Nekobin Url", url=f"https://nekobin.com/{key}" ), InlineKeyboardButton( "Nekobin Raw", url=f"https://nekobin.com/raw/{key}" ), ] ] ) # Finally, send the message context.bot.send_message( chat_id=MESSAGE_DUMP, text="an error has been found here !!!", reply_markup=markup, )