Add red_delete_data_for_user

This commit is contained in:
bobloy 2020-08-06 11:34:05 -04:00
parent ea71aafb52
commit 36dc74cfb1
25 changed files with 144 additions and 5 deletions

View File

@ -38,6 +38,10 @@ class AnnounceDaily(Cog):
self.config.register_global(**default_global) self.config.register_global(**default_global)
self.config.register_guild(**default_guild) self.config.register_guild(**default_guild)
async def red_delete_data_for_user(self, **kwargs):
"""Nothing to delete"""
return
async def _get_msgs(self): async def _get_msgs(self):
return DEFAULT_MESSAGES + await self.config.messages() return DEFAULT_MESSAGES + await self.config.messages()

View File

@ -22,6 +22,10 @@ class CCRole(commands.Cog):
self.config.register_guild(**default_guild) self.config.register_guild(**default_guild)
async def red_delete_data_for_user(self, **kwargs):
"""Nothing to delete"""
return
@commands.guild_only() @commands.guild_only()
@commands.group() @commands.group()
async def ccrole(self, ctx: commands.Context): async def ccrole(self, ctx: commands.Context):

View File

@ -2,6 +2,7 @@ import asyncio
import os import os
import pathlib import pathlib
from datetime import datetime, timedelta from datetime import datetime, timedelta
from typing import Literal
import discord import discord
from chatterbot import ChatBot from chatterbot import ChatBot
@ -11,6 +12,7 @@ from chatterbot.trainers import ChatterBotCorpusTrainer, ListTrainer
from redbot.core import Config, commands from redbot.core import Config, commands
from redbot.core.commands import Cog from redbot.core.commands import Cog
from redbot.core.data_manager import cog_data_path from redbot.core.data_manager import cog_data_path
from redbot.core.utils import AsyncIter
class ENG_LG: # TODO: Add option to use this large model class ENG_LG: # TODO: Add option to use this large model
@ -49,8 +51,12 @@ class Chatter(Cog):
self.loop = asyncio.get_event_loop() self.loop = asyncio.get_event_loop()
async def red_delete_data_for_user(self, **kwargs):
"""Nothing to delete"""
return
def _create_chatbot( def _create_chatbot(
self, data_path, similarity_algorithm, similarity_threshold, tagger_language self, data_path, similarity_algorithm, similarity_threshold, tagger_language
): ):
return ChatBot( return ChatBot(
"ChatterBot", "ChatterBot",
@ -99,7 +105,7 @@ class Chatter(Cog):
try: try:
async for message in channel.history( async for message in channel.history(
limit=None, after=after, oldest_first=True limit=None, after=after, oldest_first=True
).filter( ).filter(
predicate=predicate predicate=predicate
): # type: discord.Message ): # type: discord.Message
@ -182,7 +188,9 @@ class Chatter(Cog):
try: try:
os.remove(self.data_path) os.remove(self.data_path)
except PermissionError: except PermissionError:
await ctx.maybe_send_embed("Failed to clear training database. Please wait a bit and try again") await ctx.maybe_send_embed(
"Failed to clear training database. Please wait a bit and try again"
)
self._create_chatbot(self.data_path, SpacySimilarity, 0.45, ENG_MD) self._create_chatbot(self.data_path, SpacySimilarity, 0.45, ENG_MD)

View File

@ -28,6 +28,10 @@ class CogLint(Cog):
self.config.register_global(**default_global) self.config.register_global(**default_global)
self.config.register_guild(**default_guild) self.config.register_guild(**default_guild)
async def red_delete_data_for_user(self, **kwargs):
"""Nothing to delete"""
return
@commands.command() @commands.command()
async def autolint(self, ctx: commands.Context): async def autolint(self, ctx: commands.Context):
"""Toggles automatically linting code""" """Toggles automatically linting code"""

View File

@ -32,6 +32,10 @@ class Dad(Cog):
self.cooldown = defaultdict(datetime.now) self.cooldown = defaultdict(datetime.now)
async def red_delete_data_for_user(self, **kwargs):
"""Nothing to delete"""
return
@commands.command() @commands.command()
async def dadjoke(self, ctx: commands.Context): async def dadjoke(self, ctx: commands.Context):
headers = { headers = {

View File

@ -18,6 +18,10 @@ class ExclusiveRole(Cog):
self.config.register_guild(**default_guild) self.config.register_guild(**default_guild)
async def red_delete_data_for_user(self, **kwargs):
"""Nothing to delete"""
return
@commands.guild_only() @commands.guild_only()
@commands.group(aliases=["exclusiverole"]) @commands.group(aliases=["exclusiverole"])
async def exclusive(self, ctx): async def exclusive(self, ctx):

View File

@ -1,9 +1,11 @@
from datetime import date, timedelta from datetime import date, timedelta
from typing import Literal
import discord import discord
from redbot.core import Config, checks, commands from redbot.core import Config, checks, commands
from redbot.core.bot import Red from redbot.core.bot import Red
from redbot.core.commands import Cog from redbot.core.commands import Cog
from redbot.core.utils import AsyncIter
from redbot.core.utils.chat_formatting import pagify from redbot.core.utils.chat_formatting import pagify
@ -22,6 +24,21 @@ class Flag(Cog):
self.config.register_global(**default_global) self.config.register_global(**default_global)
self.config.register_guild(**default_guild) self.config.register_guild(**default_guild)
async def red_delete_data_for_user(
self,
*,
requester: Literal["discord_deleted_user", "owner", "user", "user_strict"],
user_id: int,
):
if requester not in ["discord_deleted_user", "owner"]:
return
all_members = await self.config.all_members()
async for guild_id, guild_data in AsyncIter(all_members.items(), steps=100):
if user_id in guild_data:
await self.config.member_from_ids(guild_id, user_id).clear()
@checks.is_owner() @checks.is_owner()
@commands.guild_only() @commands.guild_only()
@commands.command() @commands.command()

View File

@ -21,6 +21,10 @@ class ForceMention(Cog):
self.config.register_global(**default_global) self.config.register_global(**default_global)
self.config.register_guild(**default_guild) self.config.register_guild(**default_guild)
async def red_delete_data_for_user(self, **kwargs):
"""Nothing to delete"""
return
@checks.admin_or_permissions(manage_roles=True) @checks.admin_or_permissions(manage_roles=True)
@commands.command() @commands.command()
async def forcemention(self, ctx: commands.Context, role: str, *, message=""): async def forcemention(self, ctx: commands.Context, role: str, *, message=""):

View File

@ -14,6 +14,7 @@ class Hangman(Cog):
letters = "🇦🇧🇨🇩🇪🇫🇬🇭🇮🇯🇰🇱🇲🇳🇴🇵🇶🇷🇸🇹🇺🇻🇼🇽🇾🇿" letters = "🇦🇧🇨🇩🇪🇫🇬🇭🇮🇯🇰🇱🇲🇳🇴🇵🇶🇷🇸🇹🇺🇻🇼🇽🇾🇿"
def __init__(self, bot): def __init__(self, bot):
super().__init__()
self.bot = bot self.bot = bot
self.config = Config.get_conf(self, identifier=1049711010310997110) self.config = Config.get_conf(self, identifier=1049711010310997110)
default_guild = {"theface": ":thinking:", "emojis": True} default_guild = {"theface": ":thinking:", "emojis": True}
@ -39,6 +40,10 @@ class Hangman(Cog):
self.hanglist = {} self.hanglist = {}
async def red_delete_data_for_user(self, **kwargs):
"""Nothing to delete"""
return
async def _update_hanglist(self): async def _update_hanglist(self):
for guild in self.bot.guilds: for guild in self.bot.guilds:
theface = await self.config.guild(guild).theface() theface = await self.config.guild(guild).theface()

View File

@ -41,6 +41,10 @@ class InfoChannel(Cog):
self._critical_section_wooah_ = 0 self._critical_section_wooah_ = 0
async def red_delete_data_for_user(self, **kwargs):
"""Nothing to delete"""
return
@commands.command() @commands.command()
@checks.admin() @checks.admin()
async def infochannel(self, ctx: commands.Context): async def infochannel(self, ctx: commands.Context):

View File

@ -10,12 +10,17 @@ class Leaver(Cog):
""" """
def __init__(self, bot: Red): def __init__(self, bot: Red):
super().__init__()
self.bot = bot self.bot = bot
self.config = Config.get_conf(self, identifier=9811198108111121, force_registration=True) self.config = Config.get_conf(self, identifier=9811198108111121, force_registration=True)
default_guild = {"channel": ""} default_guild = {"channel": ""}
self.config.register_guild(**default_guild) self.config.register_guild(**default_guild)
async def red_delete_data_for_user(self, **kwargs):
"""Nothing to delete"""
return
@commands.group(aliases=["setleaver"]) @commands.group(aliases=["setleaver"])
@checks.mod_or_permissions(administrator=True) @checks.mod_or_permissions(administrator=True)
async def leaverset(self, ctx): async def leaverset(self, ctx):

View File

@ -9,8 +9,13 @@ class LoveCalculator(Cog):
"""Calculate the love percentage for two users!""" """Calculate the love percentage for two users!"""
def __init__(self, bot): def __init__(self, bot):
super().__init__()
self.bot = bot self.bot = bot
async def red_delete_data_for_user(self, **kwargs):
"""Nothing to delete"""
return
@commands.command(aliases=["lovecalc"]) @commands.command(aliases=["lovecalc"])
async def lovecalculator( async def lovecalculator(
self, ctx: commands.Context, lover: discord.Member, loved: discord.Member self, ctx: commands.Context, lover: discord.Member, loved: discord.Member

View File

@ -1,10 +1,12 @@
from datetime import datetime from datetime import datetime
from typing import Literal
import dateutil.parser import dateutil.parser
import discord import discord
from redbot.core import Config, commands from redbot.core import Config, commands
from redbot.core.bot import Red from redbot.core.bot import Red
from redbot.core.commands import Cog from redbot.core.commands import Cog
from redbot.core.utils import AsyncIter
class LastSeen(Cog): class LastSeen(Cog):
@ -28,6 +30,19 @@ class LastSeen(Cog):
self.config.register_guild(**default_guild) self.config.register_guild(**default_guild)
self.config.register_member(**default_member) self.config.register_member(**default_member)
async def red_delete_data_for_user(
self,
*,
requester: Literal["discord_deleted_user", "owner", "user", "user_strict"],
user_id: int,
):
all_members = await self.config.all_members()
async for guild_id, guild_data in AsyncIter(all_members.items(), steps=100):
if user_id in guild_data:
await self.config.member_from_ids(guild_id, user_id).clear()
@staticmethod @staticmethod
def get_date_time(s): def get_date_time(s):
d = dateutil.parser.parse(s) d = dateutil.parser.parse(s)

View File

@ -5,18 +5,19 @@ import datetime
import json import json
import time import time
from random import choice from random import choice
from typing import Literal
import discord import discord
from redbot.core import Config, bank, commands from redbot.core import Config, bank, commands
from redbot.core.bot import Red from redbot.core.bot import Red
from redbot.core.data_manager import bundled_data_path from redbot.core.data_manager import bundled_data_path
from redbot.core.utils import AsyncIter
class Gardener(commands.Cog): class Gardener:
"""Gardener class""" """Gardener class"""
def __init__(self, user: discord.User, config: Config): def __init__(self, user: discord.User, config: Config):
super().__init__()
self.user = user self.user = user
self.config = config self.config = config
self.badges = [] self.badges = []
@ -180,7 +181,17 @@ class PlantTycoon(commands.Cog):
# self.bank = bot.get_cog('Economy').bank # self.bank = bot.get_cog('Economy').bank
async def red_delete_data_for_user(
self,
*,
requester: Literal["discord_deleted_user", "owner", "user", "user_strict"],
user_id: int,
):
await self.config.user_from_id(user_id).clear()
async def _load_plants_products(self): async def _load_plants_products(self):
"""Runs in __init__.py before cog is added to the bot"""
plant_path = bundled_data_path(self) / "plants.json" plant_path = bundled_data_path(self) / "plants.json"
product_path = bundled_data_path(self) / "products.json" product_path = bundled_data_path(self) / "products.json"
with plant_path.open() as json_data: with plant_path.open() as json_data:

View File

@ -25,6 +25,10 @@ class QRInvite(Cog):
self.config.register_global(**default_global) self.config.register_global(**default_global)
self.config.register_guild(**default_guild) self.config.register_guild(**default_guild)
async def red_delete_data_for_user(self, **kwargs):
"""Nothing to delete"""
return
@commands.command() @commands.command()
async def qrinvite( async def qrinvite(
self, self,

View File

@ -35,6 +35,10 @@ class ReactRestrict(Cog):
) )
self.config.register_global(registered_combos=[]) self.config.register_global(registered_combos=[])
async def red_delete_data_for_user(self, **kwargs):
"""Nothing to delete"""
return
async def combo_list(self) -> List[ReactRestrictCombo]: async def combo_list(self) -> List[ReactRestrictCombo]:
""" """
Returns a list of reactrestrict combos. Returns a list of reactrestrict combos.

View File

@ -15,6 +15,10 @@ class RecyclingPlant(Cog):
self.bot = bot self.bot = bot
self.junk = None self.junk = None
async def red_delete_data_for_user(self, **kwargs):
"""Nothing to delete"""
return
def load_junk(self): def load_junk(self):
junk_path = bundled_data_path(self) / "junk.json" junk_path = bundled_data_path(self) / "junk.json"
with junk_path.open() as json_data: with junk_path.open() as json_data:

View File

@ -21,6 +21,10 @@ class RPSLS(Cog):
super().__init__() super().__init__()
self.bot = bot self.bot = bot
async def red_delete_data_for_user(self, **kwargs):
"""Nothing to delete"""
return
@commands.command() @commands.command()
async def rpsls(self, ctx: commands.Context, choice: str): async def rpsls(self, ctx: commands.Context, choice: str):
""" """

View File

@ -27,6 +27,10 @@ class SayUrl(Cog):
self.config.register_global(**default_global) self.config.register_global(**default_global)
self.config.register_guild(**default_guild) self.config.register_guild(**default_guild)
async def red_delete_data_for_user(self, **kwargs):
"""Nothing to delete"""
return
@commands.command() @commands.command()
async def sayurl(self, ctx: commands.Context, url): async def sayurl(self, ctx: commands.Context, url):
""" """

View File

@ -11,6 +11,10 @@ class SCP(Cog):
super().__init__() super().__init__()
self.bot = bot self.bot = bot
async def red_delete_data_for_user(self, **kwargs):
"""Nothing to delete"""
return
@commands.command() @commands.command()
async def scp(self, ctx: commands.Context, num: int): async def scp(self, ctx: commands.Context, num: int):
"""Look up SCP articles. """Look up SCP articles.

View File

@ -48,6 +48,10 @@ class StealEmoji(Cog):
self.is_on = None self.is_on = None
async def red_delete_data_for_user(self, **kwargs):
"""Nothing to delete"""
return
@commands.group() @commands.group()
async def stealemoji(self, ctx: commands.Context): async def stealemoji(self, ctx: commands.Context):
""" """

View File

@ -22,6 +22,10 @@ class Timerole(Cog):
self.config.register_guild(**default_guild) self.config.register_guild(**default_guild)
self.updating = self.bot.loop.create_task(self.check_day()) self.updating = self.bot.loop.create_task(self.check_day())
async def red_delete_data_for_user(self, **kwargs):
"""Nothing to delete"""
return
def cog_unload(self): def cog_unload(self):
self.updating.cancel() self.updating.cancel()

View File

@ -23,6 +23,10 @@ class TTS(Cog):
self.config.register_global(**default_global) self.config.register_global(**default_global)
self.config.register_guild(**default_guild) self.config.register_guild(**default_guild)
async def red_delete_data_for_user(self, **kwargs):
"""Nothing to delete"""
return
@commands.command(aliases=["t2s", "text2"]) @commands.command(aliases=["t2s", "text2"])
async def tts(self, ctx: commands.Context, *, text: str): async def tts(self, ctx: commands.Context, *, text: str):
""" """

View File

@ -12,6 +12,10 @@ class Unicode(Cog):
super().__init__() super().__init__()
self.bot = bot self.bot = bot
async def red_delete_data_for_user(self, **kwargs):
"""Nothing to delete"""
return
@commands.group(name="unicode", pass_context=True) @commands.group(name="unicode", pass_context=True)
async def unicode(self, ctx): async def unicode(self, ctx):
"""Encode/Decode a Unicode character.""" """Encode/Decode a Unicode character."""

View File

@ -20,6 +20,7 @@ class Werewolf(Cog):
""" """
def __init__(self, bot: Red): def __init__(self, bot: Red):
super().__init__()
self.bot = bot self.bot = bot
self.config = Config.get_conf( self.config = Config.get_conf(
self, identifier=87101114101119111108102, force_registration=True self, identifier=87101114101119111108102, force_registration=True
@ -37,6 +38,10 @@ class Werewolf(Cog):
self.games = {} # Active games stored here, id is per guild self.games = {} # Active games stored here, id is per guild
async def red_delete_data_for_user(self, **kwargs):
"""Nothing to delete"""
return
def __unload(self): def __unload(self):
print("Unload called") print("Unload called")
for game in self.games.values(): for game in self.games.values():