Esempio n. 1
0
 def decorator(func):
     return tasks.Loop(func,
                       seconds=seconds,
                       minutes=minutes,
                       hours=hours,
                       count=count,
                       reconnect=reconnect,
                       loop=loop)
Esempio n. 2
0
 def setup_char(self, char: BaseCharacter, on_team1: bool):
     char.tick()
     if on_team1:
         char.combat.on_team1 = True
     char.combat.target = 0
     char.combat.alive = True
     char.combat.task = tasks.Loop(self.combat_tick, 2 * char.stats.speed,
                                   0, 0, None, True, None)
Esempio n. 3
0
 def decorator(func):
     inst = tasks.Loop(func,
                       seconds=0,
                       minutes=0,
                       hours=24,
                       count=None,
                       reconnect=True,
                       loop=None)
     inst.before_loop(wait_for_time)
     return inst
Esempio n. 4
0
	def get_loop(self, name, ScraperClass, out_channel):
		@handle_loop_error(self)
		@update_check(name, self)
		async def loop():
			async for x in (ScraperClass.get_updates()):
				await out_channel.send(**x)

		kwargs = {
            'seconds': 5, 'minutes': 0, 'hours': 0,
			'count': None,
			'reconnect': True,
			'loop': None
        }
		return tasks.Loop(loop, **kwargs)
Esempio n. 5
0
 async def _start(self,
                  ctx: commands.Context,
                  text: str,
                  secs: int = 60,
                  count: int = None):
     if not self.loops[ctx.guild.id][ctx.author]:
         func = self.send_message(ctx.channel, text)
         loop = tasks.Loop(func, secs, 0, 0, count, True, None)
         self.loops[ctx.guild.id][ctx.author] = {
             "channel": ctx.channel,
             "message": text,
             "loop": loop
         }
         loop.start()
         await ctx.send("Spammer started!")
     else:
         await ctx.send(
             f"You already have a spammer running. Run `{ctx.prefix}spam stop` to stop it."
         )
Esempio n. 6
0
    async def on_ready(self):
        """Bot startup, sets uptime."""

        # Wait until config cache is populated with stuff from db and on_connect ran
        await self.wait_for_connected()

        if self.guild is None:
            logger.error("Logging out due to invalid GUILD_ID.")
            return await self.logout()

        logger.line()
        logger.debug("Client ready.")
        logger.info("Logged in as: %s", self.user)
        logger.info("Bot ID: %s", self.user.id)
        owners = ", ".join(
            getattr(self.get_user(owner_id), "name", str(owner_id)) for owner_id in self.owner_ids
        )
        logger.info("Owners: %s", owners)
        logger.info("Prefix: %s", self.prefix)
        logger.info("Guild Name: %s", self.guild.name)
        logger.info("Guild ID: %s", self.guild.id)
        if self.using_multiple_server_setup:
            logger.info("Receiving guild ID: %s", self.modmail_guild.id)
        logger.line()

        await self.threads.populate_cache()

        # closures
        closures = self.config["closures"]
        logger.info("There are %d thread(s) pending to be closed.", len(closures))
        logger.line()

        for recipient_id, items in tuple(closures.items()):
            after = (datetime.fromisoformat(items["time"]) - datetime.utcnow()).total_seconds()
            if after <= 0:
                logger.debug("Closing thread for recipient %s.", recipient_id)
                after = 0
            else:
                logger.debug(
                    "Thread for recipient %s will be closed after %s seconds.", recipient_id, after
                )

            thread = await self.threads.find(recipient_id=int(recipient_id))

            if not thread:
                # If the channel is deleted
                logger.debug("Failed to close thread for recipient %s.", recipient_id)
                self.config["closures"].pop(recipient_id)
                await self.config.update()
                continue

            await thread.close(
                closer=self.get_user(items["closer_id"]),
                after=after,
                silent=items["silent"],
                delete_channel=items["delete_channel"],
                message=items["message"],
                auto_close=items.get("auto_close", False),
            )

        for log in await self.api.get_open_logs():
            if self.get_channel(int(log["channel_id"])) is None:
                logger.debug("Unable to resolve thread with channel %s.", log["channel_id"])
                log_data = await self.api.post_log(
                    log["channel_id"],
                    {
                        "open": False,
                        "closed_at": str(datetime.utcnow()),
                        "close_message": "Channel has been deleted, no closer found.",
                        "closer": {
                            "id": str(self.user.id),
                            "name": self.user.name,
                            "discriminator": self.user.discriminator,
                            "avatar_url": str(self.user.avatar_url),
                            "mod": True,
                        },
                    },
                )
                if log_data:
                    logger.debug("Successfully closed thread with channel %s.", log["channel_id"])
                else:
                    logger.debug(
                        "Failed to close thread with channel %s, skipping.", log["channel_id"]
                    )

        self.metadata_loop = tasks.Loop(
            self.post_metadata,
            seconds=0,
            minutes=0,
            hours=1,
            count=None,
            reconnect=True,
            loop=None,
        )
        self.metadata_loop.before_loop(self.before_post_metadata)
        self.metadata_loop.start()
Esempio n. 7
0
    async def on_ready(self):
        """Bot startup, sets uptime."""

        # Wait until config cache is populated with stuff from db and on_connect ran
        await self.wait_for_connected()

        if self.guild is None:
            logger.error("Logging out due to invalid GUILD_ID.")
            return await self.logout()

        logger.line()
        logger.info("Client ready.")
        logger.line()
        logger.info("Logged in as: %s", self.user)
        logger.info("User ID: %s", self.user.id)
        logger.info("Prefix: %s", self.prefix)
        logger.info("Guild Name: %s", self.guild.name)
        logger.info("Guild ID: %s", self.guild.id)
        if self.using_multiple_server_setup:
            logger.info("Receiving guild ID: %s", self.modmail_guild.id)
        logger.line()

        await self.threads.populate_cache()

        # closures
        closures = self.config["closures"]
        logger.info("There are %d thread(s) pending to be closed.",
                    len(closures))
        logger.line()

        for recipient_id, items in tuple(closures.items()):
            after = (datetime.fromisoformat(items["time"]) -
                     datetime.utcnow()).total_seconds()
            if after < 0:
                after = 0

            thread = await self.threads.find(recipient_id=int(recipient_id))

            if not thread:
                # If the channel is deleted
                logger.debug("Failed to close thread for recipient %s.",
                             recipient_id)
                self.config["closures"].pop(recipient_id)
                await self.config.update()
                continue

            logger.debug("Closing thread for recipient %s.", recipient_id)

            await thread.close(
                closer=self.get_user(items["closer_id"]),
                after=after,
                silent=items["silent"],
                delete_channel=items["delete_channel"],
                message=items["message"],
                auto_close=items.get("auto_close", False),
            )

        self.metadata_loop = tasks.Loop(
            self.post_metadata,
            seconds=0,
            minutes=0,
            hours=1,
            count=None,
            reconnect=True,
            loop=None,
        )
        self.metadata_loop.before_loop(self.before_post_metadata)
        self.metadata_loop.after_loop(self.after_post_metadata)
        self.metadata_loop.start()
Esempio n. 8
0
 def decorator(func):
     if predicate:
         if not inspect.isfunction(predicate):
             raise ValueError("predicate must be a function")
         return PredicateLoop(func, predicate=predicate, **kwargs)
     return tasks.Loop(func, **kwargs)
Esempio n. 9
0
    async def on_ready(self):
        """L'avvio del bot."""
        # commands.Bot.remove_command(self, name="help")
        # Wait until config cache is populated with stuff from db and on_connect ran
        await self.wait_for_connected()

        if self.guild is None:
            logger.error(
                "Spegnimento per via della configurazione `GUILD_ID` non valida."
            )
            return await self.logout()

        logger.line()
        logger.debug("Client pronto.")
        logger.info("Loggato come: %s", self.user)
        logger.info("ID Bot: %s", self.user.id)
        owners = ", ".join(
            getattr(self.get_user(owner_id), "name", str(owner_id))
            for owner_id in self.owner_ids)
        logger.info("Proprietari: %s", owners)
        logger.info("Prefix: %s", self.prefix)
        logger.info("Nome server: %s", self.guild.name)
        logger.info("ID Server: %s", self.guild.id)
        if self.using_multiple_server_setup:
            logger.info("Ricezione ID Server: %s", self.modmail_guild.id)
        logger.line()

        await self.threads.populate_cache()

        # closures
        closures = self.config["closures"]
        logger.info("Ci sono %d stanze che stanno per essere chiuse.",
                    len(closures))
        logger.line()

        for recipient_id, items in tuple(closures.items()):
            after = (datetime.fromisoformat(items["time"]) -
                     datetime.utcnow()).total_seconds()
            if after <= 0:
                logger.debug("Sto chiudendo la stanza per l'utente %s.",
                             recipient_id)
                after = 0
            else:
                logger.debug(
                    "La stanza dell'utente %s verrà chiusa tra %s secondi.",
                    recipient_id, after)

            thread = await self.threads.find(recipient_id=int(recipient_id))

            if not thread:
                # If the channel is deleted
                logger.debug(
                    "Non è stato possibile chiudere la stanza per l'utente %s.",
                    recipient_id)
                self.config["closures"].pop(recipient_id)
                await self.config.update()
                continue

            await thread.close(
                closer=self.get_user(items["closer_id"]),
                after=after,
                silent=items["silent"],
                delete_channel=items["delete_channel"],
                message=items["message"],
                auto_close=items.get("auto_close", False),
            )

        for log in await self.api.get_open_logs():
            if self.get_channel(int(log["channel_id"])) is None:
                logger.debug("Unable to resolve thread with channel %s.",
                             log["channel_id"])
                log_data = await self.api.post_log(
                    log["channel_id"],
                    {
                        "open": False,
                        "closed_at": str(datetime.utcnow()),
                        "close_message":
                        "Channel has been deleted, no closer found.",
                        "closer": {
                            "id": str(self.user.id),
                            "name": self.user.name,
                            "discriminator": self.user.discriminator,
                            "avatar_url": str(self.user.avatar_url),
                            "mod": True,
                        },
                    },
                )
                if log_data:
                    logger.debug(
                        "La stanza con canale %s è stata chiusa con successo.",
                        log["channel_id"])
                else:
                    logger.debug(
                        "Non è stato possibile chiudere la stanza con canale %s, salto.",
                        log["channel_id"],
                    )

        self.metadata_loop = tasks.Loop(
            self.post_metadata,
            seconds=0,
            minutes=0,
            hours=1,
            count=None,
            reconnect=True,
            loop=None,
        )
        self.metadata_loop.before_loop(self.before_post_metadata)
        self.metadata_loop.start()