示例#1
0
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)

    # 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.
    tb_list = traceback.format_exception(None, context.error,
                                         context.error.__traceback__)
    tb = ''.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 = ('An exception was raised while handling an update\n'
               '<pre>update = {}</pre>\n\n'
               '<pre>context.chat_data = {}</pre>\n\n'
               '<pre>context.user_data = {}</pre>\n\n'
               '<pre>{}</pre>').format(
                   html.escape(
                       json.dumps(update.to_dict(),
                                  indent=2,
                                  ensure_ascii=False)),
                   html.escape(str(context.chat_data)),
                   html.escape(str(context.user_data)), html.escape(tb))

    # Finally, send the message
    context.bot.send_message(MESSAGE_DUMP,
                             text=message,
                             parse_mode=ParseMode.HTML)
示例#2
0
def __list_all_modules():
    from os.path import dirname, basename, isfile
    import glob
    # 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.")
                quit(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