diff --git a/README.md b/README.md index 47a5a22..798b52b 100644 --- a/README.md +++ b/README.md @@ -11,6 +11,7 @@ Cog Function | hangman | **Alpha** |
Play a game of hangmanSome visual glitches and needs more customization
| | howdoi | **Incomplete** |
Create temporary marks on users that expire after specified timeNot yet ported to v3
| | leaver | **Incomplete** |
Send a message in a channel when a user leaves the serverNot yet ported to v3
| +| lseen | **Alpha** |
Track when a member was last onlineAlpha release, please report bugs
| | reactrestrict | **Alpha** |
Removes reactions by role per channelA bit clunky, but functional
| | secrethitler | **Incomplete** |
Play the Secret Hitler gameConcept, no work done yet
| | stealemoji | **Alpha** |
Steals any custom emoji it sees in a reactionSome planned upgrades for server generation
| diff --git a/lseen/__init__.py b/lseen/__init__.py new file mode 100644 index 0000000..716f34d --- /dev/null +++ b/lseen/__init__.py @@ -0,0 +1,5 @@ +from .lseen import LastSeen + + +def setup(bot): + bot.add_cog(LastSeen(bot)) diff --git a/lseen/lseen.py b/lseen/lseen.py new file mode 100644 index 0000000..c4c0c42 --- /dev/null +++ b/lseen/lseen.py @@ -0,0 +1,92 @@ +from datetime import datetime + +import dateutil.parser +import discord +from discord.ext import commands +from redbot.core import Config, RedContext +from redbot.core.bot import Red + + +class LastSeen: + """ + V3 Cog Template + """ + + online_status = discord.Status.online + + offline_status = discord.Status.offline + + def __init__(self, bot: Red): + self.bot = bot + self.config = Config.get_conf(self, identifier=9811198108111121, force_registration=True) + default_global = {} + default_guild = { + "enabled": True + } + default_member = { + "seen": None + } + + self.config.register_global(**default_global) + self.config.register_guild(**default_guild) + self.config.register_member(**default_member) + + @staticmethod + def get_date_time(s): + d = dateutil.parser.parse(s) + return d + + @commands.group(aliases=['setlseen'], name='lseenset') + async def lset(self, ctx: RedContext): + """Change settings for lseen""" + if ctx.invoked_subcommand is None: + await ctx.send_help() + + @lset.command(name="toggle") + async def lset_toggle(self, ctx: RedContext): + """Toggles tracking seen for this server""" + enabled = not await self.config.guild(ctx.guild).enabled() + await self.config.guild(ctx.guild).enabled.set( + enabled) + + await ctx.send( + "Seen for this server is now {}".format( + "Enabled" if enabled else "Disabled")) + + @commands.command(aliases=['lastseen']) + async def lseen(self, ctx: RedContext, member: discord.Member): + """ + Just says the time the user was last seen + + :param member: + """ + + if member.status != self.offline_status: + last_seen = datetime.utcnow() + else: + last_seen = await self.config.member(member).seen() + if last_seen is None: + await ctx.send(embed=discord.Embed(description="I've never seen this user")) + return + last_seen = self.get_date_time(last_seen) + + # embed = discord.Embed( + # description="{} was last seen at this date and time".format(member.display_name), + # timestamp=self.get_date_time(last_seen)) + + embed = discord.Embed(timestamp=last_seen) + await ctx.send(embed=embed) + + # async def on_socket_raw_receive(self, data): + # try: + # if type(data) == str: + # raw = json.loads(data) + # print(data) + # except: + # print(data) + + async def on_member_update(self, before: discord.Member, after: discord.Member): + if before.status != self.offline_status and after.status == self.offline_status: + if not await self.config.guild(before.guild).enabled(): + return + await self.config.member(before).seen.set(datetime.utcnow().isoformat())