mirror of
https://github.com/Cog-Creators/Red-DiscordBot.git
synced 2025-11-06 19:28:54 -05:00
Record users' nickname history
20 names and 20 nicknames maximum
This commit is contained in:
parent
f1bd9da184
commit
8b52bd56af
83
cogs/mod.py
83
cogs/mod.py
@ -1,8 +1,10 @@
|
|||||||
import discord
|
import discord
|
||||||
from discord.ext import commands
|
from discord.ext import commands
|
||||||
from .utils.dataIO import fileIO
|
from .utils.dataIO import fileIO, dataIO
|
||||||
from .utils import checks
|
from .utils import checks
|
||||||
from __main__ import send_cmd_help, settings
|
from __main__ import send_cmd_help, settings
|
||||||
|
from collections import deque
|
||||||
|
from cogs.utils.chat_formatting import escape_mass_mentions
|
||||||
import os
|
import os
|
||||||
import logging
|
import logging
|
||||||
import asyncio
|
import asyncio
|
||||||
@ -13,11 +15,12 @@ class Mod:
|
|||||||
|
|
||||||
def __init__(self, bot):
|
def __init__(self, bot):
|
||||||
self.bot = bot
|
self.bot = bot
|
||||||
self.whitelist_list = fileIO("data/mod/whitelist.json", "load")
|
self.whitelist_list = dataIO.load_json("data/mod/whitelist.json")
|
||||||
self.blacklist_list = fileIO("data/mod/blacklist.json", "load")
|
self.blacklist_list = dataIO.load_json("data/mod/blacklist.json")
|
||||||
self.ignore_list = fileIO("data/mod/ignorelist.json", "load")
|
self.ignore_list = dataIO.load_json("data/mod/ignorelist.json")
|
||||||
self.filter = fileIO("data/mod/filter.json", "load")
|
self.filter = dataIO.load_json("data/mod/filter.json")
|
||||||
self.past_names = fileIO("data/mod/past_names.json", "load")
|
self.past_names = dataIO.load_json("data/mod/past_names.json")
|
||||||
|
self.past_nicknames = dataIO.load_json("data/mod/past_nicknames.json")
|
||||||
|
|
||||||
@commands.group(pass_context=True, no_pm=True)
|
@commands.group(pass_context=True, no_pm=True)
|
||||||
@checks.serverowner_or_permissions(administrator=True)
|
@checks.serverowner_or_permissions(administrator=True)
|
||||||
@ -101,7 +104,7 @@ class Mod:
|
|||||||
except:
|
except:
|
||||||
pass
|
pass
|
||||||
await self.bot.ban(user, 1)
|
await self.bot.ban(user, 1)
|
||||||
logger.info("{}({}) softbanned {}({}), deleting 1 day worth "
|
logger.info("{}({}) softbanned {}({}), deleting 1 day worth "
|
||||||
"of messages".format(author.name, author.id, user.name,
|
"of messages".format(author.name, author.id, user.name,
|
||||||
user.id))
|
user.id))
|
||||||
await self.bot.unban(server, user)
|
await self.bot.unban(server, user)
|
||||||
@ -590,17 +593,29 @@ class Mod:
|
|||||||
|
|
||||||
@commands.command()
|
@commands.command()
|
||||||
async def names(self, user : discord.Member):
|
async def names(self, user : discord.Member):
|
||||||
"""Show previous names of a user"""
|
"""Show previous names/nicknames of a user"""
|
||||||
exclude = ("@everyone", "@here")
|
server = user.server
|
||||||
if user.id in self.past_names.keys():
|
names = self.past_names[user.id] if user.id in self.past_names else None
|
||||||
names = ""
|
try:
|
||||||
for name in self.past_names[user.id]:
|
nicks = self.past_nicknames[server.id][user.id]
|
||||||
if not any(mnt in name.lower() for mnt in exclude):
|
nicks = [escape_mass_mentions(nick) for nick in nicks]
|
||||||
names += " {}".format(name)
|
except:
|
||||||
names = "```{}```".format(names)
|
nicks = None
|
||||||
await self.bot.say("Past names:\n{}".format(names))
|
msg = ""
|
||||||
|
if names:
|
||||||
|
names = [escape_mass_mentions(name) for name in names]
|
||||||
|
msg += "**Past 20 names**:\n"
|
||||||
|
msg += ", ".join(names)
|
||||||
|
if nicks:
|
||||||
|
if msg:
|
||||||
|
msg += "\n\n"
|
||||||
|
msg += "**Past 20 nicknames**:\n"
|
||||||
|
msg += ", ".join(nicks)
|
||||||
|
if msg:
|
||||||
|
await self.bot.say(msg)
|
||||||
else:
|
else:
|
||||||
await self.bot.say("That user doesn't have any recorded name change.")
|
await self.bot.say("That user doesn't have any recorded name or "
|
||||||
|
"nickname change.")
|
||||||
|
|
||||||
def discordpy_updated(self):
|
def discordpy_updated(self):
|
||||||
try:
|
try:
|
||||||
@ -638,7 +653,7 @@ class Mod:
|
|||||||
server = message.server
|
server = message.server
|
||||||
can_delete = message.channel.permissions_for(server.me).manage_messages
|
can_delete = message.channel.permissions_for(server.me).manage_messages
|
||||||
|
|
||||||
if (message.author.id == self.bot.user.id or
|
if (message.author.id == self.bot.user.id or
|
||||||
self.immune_from_filter(message) or not can_delete): # Owner, admins and mods are immune to the filter
|
self.immune_from_filter(message) or not can_delete): # Owner, admins and mods are immune to the filter
|
||||||
return
|
return
|
||||||
|
|
||||||
@ -653,15 +668,31 @@ class Mod:
|
|||||||
pass
|
pass
|
||||||
print("Message deleted. Filtered: " + w)
|
print("Message deleted. Filtered: " + w)
|
||||||
|
|
||||||
|
|
||||||
async def check_names(self, before, after):
|
async def check_names(self, before, after):
|
||||||
if before.name != after.name:
|
if before.name != after.name:
|
||||||
if before.id not in self.past_names.keys():
|
if before.id not in self.past_names.keys():
|
||||||
self.past_names[before.id] = [before.name]
|
self.past_names[before.id] = [after.name]
|
||||||
else:
|
else:
|
||||||
if before.name not in self.past_names[before.id]:
|
if after.name not in self.past_names[before.id]:
|
||||||
self.past_names[before.id].append(before.name)
|
names = deque(self.past_names[before.id], maxlen=20)
|
||||||
fileIO("data/mod/past_names.json", "save", self.past_names)
|
names.append(after.name)
|
||||||
|
self.past_names[before.id] = list(names)
|
||||||
|
dataIO.save_json("data/mod/past_names.json", self.past_names)
|
||||||
|
|
||||||
|
if before.nick != after.nick and after.nick is not None:
|
||||||
|
server = before.server
|
||||||
|
if not server.id in self.past_nicknames:
|
||||||
|
self.past_nicknames[server.id] = {}
|
||||||
|
if before.id in self.past_nicknames[server.id]:
|
||||||
|
nicks = deque(self.past_nicknames[server.id][before.id],
|
||||||
|
maxlen=20)
|
||||||
|
else:
|
||||||
|
nicks = []
|
||||||
|
if after.nick not in nicks:
|
||||||
|
nicks.append(after.nick)
|
||||||
|
self.past_nicknames[server.id][before.id] = list(nicks)
|
||||||
|
dataIO.save_json("data/mod/past_nicknames.json",
|
||||||
|
self.past_nicknames)
|
||||||
|
|
||||||
def check_folders():
|
def check_folders():
|
||||||
folders = ("data", "data/mod/")
|
folders = ("data", "data/mod/")
|
||||||
@ -694,6 +725,10 @@ def check_files():
|
|||||||
print("Creating empty past_names.json...")
|
print("Creating empty past_names.json...")
|
||||||
fileIO("data/mod/past_names.json", "save", {})
|
fileIO("data/mod/past_names.json", "save", {})
|
||||||
|
|
||||||
|
if not os.path.isfile("data/mod/past_nicknames.json"):
|
||||||
|
print("Creating empty past_nicknames.json...")
|
||||||
|
fileIO("data/mod/past_nicknames.json", "save", {})
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def setup(bot):
|
def setup(bot):
|
||||||
@ -712,4 +747,4 @@ def setup(bot):
|
|||||||
n = Mod(bot)
|
n = Mod(bot)
|
||||||
bot.add_listener(n.check_filter, "on_message")
|
bot.add_listener(n.check_filter, "on_message")
|
||||||
bot.add_listener(n.check_names, "on_member_update")
|
bot.add_listener(n.check_names, "on_member_update")
|
||||||
bot.add_cog(n)
|
bot.add_cog(n)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user