Ejemplo n.º 1
0
 async def on_command_error(self, context, error):
     cmd_name = context.command.name
     cmd_settings = Settings.command_settings(cmd_name, context.guild.id)
     if isinstance(error, discord.ext.commands.MissingPermissions
                   ) and cmd_settings.get("visible"):
         notice = "You need the following permissions for this command: {}".format(
             ", ".join([f"`{p}`" for p in error.missing_perms]))
         await utils.say(context.channel, content=notice)
     elif isinstance(error, discord.ext.commands.NotOwner):
         return
     else:
         Logger.error(logger, error)
Ejemplo n.º 2
0
        async def check_content(message, check, custom_message):
            if check:
                content = message.clean_content
                try:
                    await message.delete()
                except (discord.Forbidden, discord.HTTPException) as e:
                    Logger.warn(
                        logger,
                        f"Unable to delete message at {message.jump_url}. {e}")
                else:
                    await utils.say(
                        message.author,
                        context=message,
                        parse=True,
                        content=
                        f"{custom_message}\nYour message: ```{content}```")
                    return True

            return False
Ejemplo n.º 3
0
    def set_commands(self, *cmds):
        self.add_cog(commands.Admin(self))
        self.add_cog(commands.General(self))
        self.add_cog(commands.Statistics(self))

        for c in cmds:
            self.add_cog(c)

        for command in self.commands:
            Logger.debug(logger, f"Setting up command '{command.name}'")
            cmd_settings = Settings.command_settings(command.name)
            if not cmd_settings:
                continue

            command.aliases = cmd_settings.get("aliases", [])
            command.hidden = not cmd_settings.get("visible", True)
            command.description = cmd_settings.get("description", "")
            command.help = cmd_settings.get("help", "")
            command.usage = cmd_settings.get("usage", "")
            Logger.debug(logger, f"Command '{command.name}' all set")
Ejemplo n.º 4
0
    def include_reactions_inactivity(cls, server_id=None):
        if server_id:
            server_config = cls.server_features(server_id, "inactivity")
            if server_config:
                try:
                    return server_config["include_reactions"]
                except KeyError as err:
                    Logger.debug(
                        logger,
                        f"'inactivity' config for server ID {server_id} is missing a setting for 'include_reactions'. Using default setting instead."
                    )

        try:
            return cls.default_features("inactivity")["include_reactions"]
        except KeyError as err:
            Logger.warn(
                logger,
                f"Missing a default setting for 'inactivity: include_reactions'. {err}"
            )

        return True
Ejemplo n.º 5
0
    def inactive_message(cls, server_id):
        default_config = cls.default_features("inactivity")
        server_config = cls.server_features(server_id, "inactivity")
        message_enabled = default_config["message_enabled"]
        if server_config:
            message_enabled = server_config.get("message_enabled",
                                                message_enabled)

        if message_enabled:
            if server_config:
                try:
                    return server_config["message"]
                except KeyError:
                    Logger.debug(
                        logger,
                        f"'inactivity' config for server ID {server_id} is missing a setting for 'message'. Using default setting instead."
                    )

            return default_config["message"]

        return None
Ejemplo n.º 6
0
    def inactive_threshold(cls, server_id=None):
        """Returns the minimum amount of days for a server member to be considered inactive."""
        if server_id:
            server_config = cls.server_features(server_id, "inactivity")
            if server_config:
                try:
                    return server_config["days_threshold"]
                except KeyError as err:
                    Logger.debug(
                        logger,
                        f"'inactivity' config for server ID {server_id} is missing a setting for 'days_threshold'. Using default setting instead."
                    )

        try:
            return cls.default_features("inactivity")["days_threshold"]
        except KeyError as err:
            Logger.warn(
                logger,
                f"Missing a default setting for 'inactivity' feature: 'days_threshold'. {err}"
            )
            return 14
Ejemplo n.º 7
0
 def log_message(message, content):
     if message.guild:
         Logger.info(
             logger,
             f"({message.guild.name} - {message.channel.name}){content}"
         )
     else:
         try:
             Logger.info(logger, f"({message.channel.name}){content}")
         except AttributeError:
             Logger.info(logger, f"({message.author.name}){content}")
Ejemplo n.º 8
0
def use_heuristic(HEURISTIC_TYPE='Perfekt-Pred-Heuristic',
                  epochs=1,
                  threshold_dem=50,
                  deactivate_SMS=True,
                  deactivate_LION=True):

    # Naming the agent and setting up the directory path:
    now = datetime.now()
    NAME = str(
        round(threshold_dem)) + '_NO_BATTERY_' + HEURISTIC_TYPE + now.strftime(
            "_%d-%m-%Y_%H-%M-%S")
    D_PATH = '_small_d/'

    # Load the dataset:
    main_dataset = mainDataset(D_PATH=D_PATH,
                               period_string_min='15min',
                               full_dataset=True)

    # Normalized dataframe:
    df = main_dataset.make_input_df(drop_main_terminal=False,
                                    use_time_diff=True,
                                    day_diff='holiday-weekend')

    # Sum of the power demand dataframe (nor normalized):
    power_dem_df = main_dataset.load_total_power()[24:-12]

    # Load the LSTM input dataset:
    lstm_dataset = lstmInputDataset(main_dataset, df, num_past_periods=12)

    # Making predictions:
    normal_predictions = wahrsager(lstm_dataset, power_dem_df,
                                   TYPE='NORMAL').pred()[:-12]
    seq_predictions = wahrsager(lstm_dataset,
                                power_dem_df,
                                TYPE='SEQ',
                                num_outputs=12).pred()

    # Adding the predictions to the dataset:
    df = df[24:-12]
    df['normal'] = normal_predictions
    df['seq_max'] = max_seq(seq_predictions)

    logger = Logger(NAME, D_PATH)

    # Setup reward_maker
    r_maker = reward_maker(LOGGER=logger,
                           COST_TYPE='exact_costs',
                           R_TYPE='savings_focus',
                           R_HORIZON='single_step',
                           cost_per_kwh=0.2255,
                           LION_Anschaffungs_Preis=34100,
                           LION_max_Ladezyklen=1000,
                           SMS_Anschaffungs_Preis=115000 / 3,
                           SMS_max_Nutzungsjahre=20,
                           Leistungspreis=102,
                           logging_list=[
                               'cost_saving', 'exact_costs', 'sum_exact_costs',
                               'sum_cost_saving'
                           ],
                           deactivate_SMS=deactivate_SMS,
                           deactivate_LION=deactivate_LION)

    # Lade Environment:
    env = common_env(reward_maker=r_maker,
                     df=df,
                     power_dem_df=power_dem_df,
                     input_list=['norm_total_power', 'normal', 'seq_max'],
                     max_SMS_SoC=12 / 3,
                     max_LION_SoC=54,
                     PERIODEN_DAUER=15,
                     ACTION_TYPE='contin',
                     OBS_TYPE='contin',
                     AGENT_TYPE='heuristic')

    agent = heurisitc(env=env,
                      HEURISTIC_TYPE=HEURISTIC_TYPE,
                      threshold_dem=threshold_dem)

    return agent.calculate(epochs=epochs)
Ejemplo n.º 9
0
    async def on_message(self, message):
        async def check_content(message, check, custom_message):
            if check:
                content = message.clean_content
                try:
                    await message.delete()
                except (discord.Forbidden, discord.HTTPException) as e:
                    Logger.warn(
                        logger,
                        f"Unable to delete message at {message.jump_url}. {e}")
                else:
                    await utils.say(
                        message.author,
                        context=message,
                        parse=True,
                        content=
                        f"{custom_message}\nYour message: ```{content}```")
                    return True

            return False

        user = message.author
        if message.guild:
            Logger.info(
                logger,
                f"({message.guild.name} - {message.channel.name}) {user.name}: {message.content}"
            )
        else:
            try:
                Logger.info(
                    logger,
                    f"({message.channel.name}) {user.name}: {message.content}")
            except AttributeError:
                Logger.info(logger, f"({user.name}) {message.content}")
            finally:
                return

        mee6_level_up = Settings.on_message_features(message.guild.id,
                                                     "mee6_level_up")
        if mee6_level_up and mee6_level_up.get(
                "enabled") and user.id == mee6_level_up["bot_id"]:
            result = re.compile(r"{}".format(
                mee6_level_up["message_pattern"])).search(message.content)
            if result:
                mentioned = message.mentions[0]
                level = int(result.group(1))
                Logger.info(logger, f"{mentioned.name} reached level {level}")

                roles = mee6_level_up["roles"]
                for r in roles:
                    if level >= r:
                        role = discord.utils.get(message.guild.roles,
                                                 id=roles[r]["id"])
                        await mentioned.add_roles(
                            role, reason=f"User reached level {r}")

        pics_only = Settings.on_message_features(message.guild.id, "pics_only")
        if pics_only and pics_only.get("enabled"):
            channel = message.channel

            if channel.id in pics_only["channels"]:
                if await check_content(
                        message, not message.attachments,
                        pics_only["channels"][channel.id]["message"]):
                    return

        await self.process_commands(message)
Ejemplo n.º 10
0
 async def on_ready(self):
     prefix = Settings.app_defaults("cmd_prefix")
     Logger.info(logger,
                 f"{self.user.name} (ID: {self.user.id}) is now online.")
     status = Settings.app_defaults("status").format(prefix=prefix)
     await self.change_presence(activity=discord.Game(name=status))
Ejemplo n.º 11
0
 async def on_error(self, context, error):
     Logger.error(logger, error)