62 lines
2.4 KiB
Python
62 lines
2.4 KiB
Python
from discord.ext import commands
|
|
from cogs.utils.dataIO import dataIO
|
|
import discord
|
|
import os
|
|
|
|
class Seen:
|
|
'''Check when someone was last seen.'''
|
|
def __init__(self, bot):
|
|
self.bot = bot
|
|
|
|
async def _get_channel(self, id):
|
|
return discord.utils.get(self.bot.get_all_channels(), id=id)
|
|
|
|
async def listener(self, message):
|
|
if not message.channel.is_private and self.bot.user.id != message.author.id:
|
|
server = message.server
|
|
channel = message.channel
|
|
author = message.author
|
|
ts = message.timestamp
|
|
filename = 'data/seen/{}/{}.json'.format(server.id, author.id)
|
|
if not os.path.exists('data/seen/{}'.format(server.id)):
|
|
os.makedirs('data/seen/{}'.format(server.id))
|
|
data = {}
|
|
data['TIMESTAMP'] = '{} {}:{}:{}'.format(ts.date(), ts.hour, ts.minute, ts.second)
|
|
data['MESSAGE'] = message.clean_content
|
|
data['NAME'] = author.display_name
|
|
data['CHANNEL'] = channel.id
|
|
dataIO.save_json(filename, data)
|
|
|
|
@commands.command(pass_context=True, no_pm=True, name='seen')
|
|
async def _seen(self, context, username: discord.Member):
|
|
'''seen <@username>'''
|
|
server = context.message.server
|
|
author = username
|
|
filename = 'data/seen/{}/{}.json'.format(server.id, author.id)
|
|
if dataIO.is_valid_json(filename):
|
|
data = dataIO.load_json(filename)
|
|
ts = data['TIMESTAMP']
|
|
last_message = data['MESSAGE']
|
|
channel = await self._get_channel(data['CHANNEL'])
|
|
em = discord.Embed(color=discord.Color.green())
|
|
#em = discord.Embed(description='\nMessage:\n```{}```'.format(last_message), color=discord.Color.green())
|
|
avatar = author.avatar_url if author.avatar else author.default_avatar_url
|
|
em.set_author(name='{} was last seen on {} UTC in #{}'.format(author.display_name, ts, channel.name), icon_url=avatar)
|
|
await self.bot.say(embed=em)
|
|
else:
|
|
message = 'I haven\'t seen {} yet.'.format(author.display_name)
|
|
await self.bot.say('{}'.format(message))
|
|
|
|
|
|
def check_folder():
|
|
if not os.path.exists('data/seen'):
|
|
print('Creating data/seen folder...')
|
|
os.makedirs('data/seen')
|
|
|
|
|
|
def setup(bot):
|
|
check_folder()
|
|
n = Seen(bot)
|
|
bot.add_listener(n.listener, 'on_message')
|
|
bot.add_cog(n)
|