import discord from discord.ext import commands from redbot.core import Config from redbot.core.bot import Red class Away: """Le away cog""" default_global_settings = { "ign_servers": [] } default_user_settings = { "MESSAGE": False } def __init__(self, bot: Red): self.bot = bot self._away = Config.get_conf(self, 8423491260, force_registration=True) self._away.register_global(**self.default_global_settings) self._away.register_user(**self.default_user_settings) async def on_message(self, message): tmp = {} guild = message.guild list_of_guilds_ign = await self._away.ign_servers() if not guild: return if guild.id not in list_of_guilds_ign: for mention in message.mentions: tmp[mention] = True if message.author.id != guild.me.id: for author in tmp: test = await self._away.user(author).MESSAGE() if test: try: avatar = author.avatar_url if author.avatar else author.default_avatar_url if test: em = discord.Embed(description=test, color=discord.Color.blue()) em.set_author(name='{} is currently away'.format(author.display_name), icon_url=avatar) else: em = discord.Embed(color=discord.Color.blue()) em.set_author(name='{} is currently away'.format(author.display_name), icon_url=avatar) await message.channel.send(embed=em) except: if test: msg = '{} is currently away and has set the following message: `{}`'.format(author.display_name, test) else: msg = '{} is currently away'.format(author.display_name) await message.channel.send(msg) @commands.command(name="away") async def away_(self, ctx, *message): """Tell the bot you're away or back.""" author = ctx.message.author mess = await self._away.user(author).MESSAGE() if mess: await self._away.user(author).clear() msg = 'You\'re now back.' else: length = len(str(message)) if length < 256 and length > 2: await self._away.user(author).MESSAGE.set(' '.join(ctx.message.clean_content.split()[1:])) else: await self._away.user(author).MESSAGE.set(' ') msg = 'You\'re now set as away.' await ctx.send(msg) @commands.command(name="toggleaway") @commands.has_permissions(administrator=True) async def _ignore(self, ctx): """Toggle away messages on the whole server.""" guild = ctx.message.guild if guild.id in (await self._away.ign_servers()): guilds = await self._away.ign_servers() guilds.remove(guild.id) await self._away.ign_servers.set(guilds) message = 'Not ignoring this guild anymore.' else: guilds = await self._away.ign_servers() guilds.append(guild.id) await self._away.ign_servers.set(guilds) message = 'Ignoring this guild.' await ctx.send(message)