async def check_expiry(self): await self.bot.wait_for_setup() while not self.bot.is_closed(): try: async with self.bot.engine.acquire() as conn: now_datetime = datetime.utcnow() query = restrictions_tbl.select().where(restrictions_tbl.c.expiry <= now_datetime).order_by( restrictions_tbl.c.expiry.desc(), restrictions_tbl.c.user.desc() ) async for row in conn.execute(query): member = self.bot.main_server.get_member(row.user) if member is not None: await member.remove_roles(getattr(self.bot, "{}_role".format(row.type), None)) embed = discord.Embed(color=discord.Color.dark_orange(), timestamp=now_datetime) embed.title = "🕛 Restriction expired" if member is not None: embed.add_field(name="Member", value=member.mention) embed.add_field(name="Member ID", value=row.user) embed.add_field(name="Role", value=getattr(self.bot, "{}_role".format(row.type), None).name) await self.bot.modlog_channel.send(embed=embed) delete_stmt = restrictions_tbl.delete().where(restrictions_tbl.c.id == row.id) await conn.execute(delete_stmt) except Exception: # pylint: disable=broad-except self.logger.exception("Something went wrong:") finally: await asyncio.sleep(1)
async def remove_restriction(self, member, r_type): async with self.bot.engine.acquire() as conn: delete_stmt = restrictions_tbl.delete().where( (restrictions_tbl.c.user == member.id) & (restrictions_tbl.c.type == r_type)) await conn.execute(delete_stmt)