def decorator(func): return tasks.Loop(func, seconds=seconds, minutes=minutes, hours=hours, count=count, reconnect=reconnect, loop=loop)
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)
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
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)
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." )
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()
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()
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)
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()