mirror of
https://github.com/brandons209/Red-bot-Cogs.git
synced 2024-09-28 15:21:49 +12:00
add end user messages and functions, will ad functionality later
This commit is contained in:
parent
3c5b7141a7
commit
240b72bbd3
58 changed files with 257 additions and 279 deletions
|
@ -1,5 +1,6 @@
|
|||
from .leveler import Leveler
|
||||
|
||||
__red_end_user_data_statement__ = "Stores some level info like experience, profile description/picture, and message ID of user's last message in guild."
|
||||
|
||||
def setup(bot):
|
||||
n = Leveler(bot)
|
||||
|
|
|
@ -16,7 +16,7 @@ from redbot.core.i18n import Translator, cog_i18n
|
|||
from io import BytesIO
|
||||
import functools
|
||||
import textwrap
|
||||
|
||||
from typing import Literal
|
||||
|
||||
_ = Translator("Leveler", __file__)
|
||||
|
||||
|
@ -653,3 +653,11 @@ class Leveler(commands.Cog):
|
|||
return
|
||||
# reset level stats on leave.
|
||||
await self.profiles.data.member(member).clear()
|
||||
|
||||
async def red_delete_data_for_user(
|
||||
self,
|
||||
*,
|
||||
requester: Literal["discord_deleted_user", "owner", "user", "user_strict"],
|
||||
user_id: int,
|
||||
):
|
||||
pass
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
from .activitylog import ActivityLogger
|
||||
|
||||
__red_end_user_data_statement__ = "Depending on setup, can log user messages, voice channel activity, audit actions in guilds, activity statistics per guild, user name changes, and any moderation actions per guild."
|
||||
|
||||
async def setup(bot):
|
||||
n = ActivityLogger(bot)
|
||||
|
|
|
@ -14,6 +14,8 @@ import asyncio
|
|||
import glob
|
||||
import io
|
||||
|
||||
from typing import Literal
|
||||
|
||||
# plotting
|
||||
from bisect import bisect_left
|
||||
import matplotlib.pyplot as plt
|
||||
|
@ -1940,5 +1942,10 @@ class ActivityLogger(commands.Cog):
|
|||
# if member:
|
||||
# data[guild.name] = await self.config.member(member).stats()
|
||||
|
||||
async def red_delete_data_for_user(self, requester: str, user_id: int):
|
||||
async def red_delete_data_for_user(
|
||||
self,
|
||||
*,
|
||||
requester: Literal["discord_deleted_user", "owner", "user", "user_strict"],
|
||||
user_id: int,
|
||||
):
|
||||
pass
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
from .birthday import Birthday
|
||||
|
||||
__red_end_user_data_statement__ = "This cog will store a user's birthday."
|
||||
|
||||
def setup(bot):
|
||||
bot.add_cog(Birthday(bot))
|
||||
|
|
|
@ -8,7 +8,7 @@ from dateutil import parser
|
|||
import asyncio
|
||||
import datetime
|
||||
import discord
|
||||
|
||||
from typing import Literal
|
||||
|
||||
class Birthday(commands.Cog):
|
||||
"""Track birthdays, add birthday role, and annouce birthdays for users."""
|
||||
|
@ -268,3 +268,11 @@ class Birthday(commands.Cog):
|
|||
await ctx.send("No one has their birthday set in your server!")
|
||||
else:
|
||||
await menu(ctx, embeds, DEFAULT_CONTROLS)
|
||||
|
||||
async def red_delete_data_for_user(
|
||||
self,
|
||||
*,
|
||||
requester: Literal["discord_deleted_user", "owner", "user", "user_strict"],
|
||||
user_id: int,
|
||||
):
|
||||
pass
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
from .confession import Confession
|
||||
|
||||
__red_end_user_data_statement__ = "This cog won't store anything for a user."
|
||||
|
||||
def setup(bot):
|
||||
n = Confession()
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
from redbot.core import commands, checks, Config
|
||||
from redbot.core.utils.predicates import MessagePredicate
|
||||
from redbot.core.utils.menus import DEFAULT_CONTROLS, menu
|
||||
from typing import Literal
|
||||
import contextlib
|
||||
import discord
|
||||
import asyncio
|
||||
|
||||
|
||||
class Confession(commands.Cog):
|
||||
def __init__(self):
|
||||
self.config = Config.get_conf(self, identifier=665235, force_registration=True)
|
||||
|
@ -184,3 +184,11 @@ class Confession(commands.Cog):
|
|||
pass
|
||||
|
||||
await ctx.author.send("Your confession has been sent, you are forgiven now.")
|
||||
|
||||
async def red_delete_data_for_user(
|
||||
self,
|
||||
*,
|
||||
requester: Literal["discord_deleted_user", "owner", "user", "user_strict"],
|
||||
user_id: int,
|
||||
):
|
||||
pass
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
from .manager import CostManager
|
||||
|
||||
__red_end_user_data_statement__ = "This cog won't store anything for a user."
|
||||
|
||||
def setup(bot):
|
||||
bot.add_cog(CostManager(bot))
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
from redbot.core.utils.chat_formatting import *
|
||||
from redbot.core import Config, checks, commands, bank
|
||||
from typing import Literal
|
||||
import discord
|
||||
import asyncio
|
||||
|
||||
|
@ -406,3 +407,11 @@ class CostManager(commands.Cog):
|
|||
)
|
||||
await asyncio.sleep(10)
|
||||
await message.delete()
|
||||
|
||||
async def red_delete_data_for_user(
|
||||
self,
|
||||
*,
|
||||
requester: Literal["discord_deleted_user", "owner", "user", "user_strict"],
|
||||
user_id: int,
|
||||
):
|
||||
pass
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
from .disable import Disable
|
||||
|
||||
__red_end_user_data_statement__ = "This cog won't store any data for users."
|
||||
|
||||
def setup(bot):
|
||||
bot.add_cog(Disable(bot))
|
||||
|
|
|
@ -1,8 +1,9 @@
|
|||
from redbot.core.utils.chat_formatting import *
|
||||
from redbot.core import Config, checks, commands
|
||||
from redbot.core.utils.mod import is_admin_or_superior
|
||||
import discord
|
||||
from discord.ext.commands import DisabledCommand
|
||||
from typing import Literal
|
||||
import discord
|
||||
|
||||
|
||||
class DisabledError(commands.CheckFailure):
|
||||
|
@ -75,3 +76,11 @@ class Disable(commands.Cog):
|
|||
if isinstance(exception, DisabledError):
|
||||
msg = await self.config.guild(ctx.guild).disabled_message()
|
||||
await ctx.send(msg.format(ctx.command.name))
|
||||
|
||||
async def red_delete_data_for_user(
|
||||
self,
|
||||
*,
|
||||
requester: Literal["discord_deleted_user", "owner", "user", "user_strict"],
|
||||
user_id: int,
|
||||
):
|
||||
pass
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
from . import core
|
||||
|
||||
__red_end_user_data_statement__ = "This cog only stores internal variables per user."
|
||||
|
||||
def setup(bot):
|
||||
bot.add_cog(core.EconomyTrickle(bot))
|
||||
|
|
|
@ -11,6 +11,7 @@ from redbot.core import commands, checks
|
|||
from redbot.core.config import Config
|
||||
from redbot.core import bank
|
||||
from redbot.core.utils.chat_formatting import pagify, box
|
||||
from typing import Literal
|
||||
|
||||
from .activity import RecordHandler
|
||||
from .converters import configable_guild_defaults, settings_converter
|
||||
|
@ -323,3 +324,11 @@ class EconomyTrickle(commands.Cog):
|
|||
pages = pagify(msg)
|
||||
for page in pages:
|
||||
await ctx.send(box(page))
|
||||
|
||||
async def red_delete_data_for_user(
|
||||
self,
|
||||
*,
|
||||
requester: Literal["discord_deleted_user", "owner", "user", "user_strict"],
|
||||
user_id: int,
|
||||
):
|
||||
pass
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
from .core import EveryoneEmoji
|
||||
|
||||
__red_end_user_data_statement__ = "This cog stores no data."
|
||||
|
||||
def setup(bot):
|
||||
bot.add_cog(EveryoneEmoji(bot))
|
||||
|
|
|
@ -6,7 +6,7 @@ import unicodedata
|
|||
import aiohttp
|
||||
import discord
|
||||
from redbot.core import commands, checks
|
||||
|
||||
from typing import Literal
|
||||
|
||||
class EveryoneEmoji(commands.Cog):
|
||||
|
||||
|
@ -108,3 +108,11 @@ class EveryoneEmoji(commands.Cog):
|
|||
img = io.BytesIO(img)
|
||||
|
||||
await ctx.send(f"{ctx.author.display_name} says:", file=discord.File(img, name))
|
||||
|
||||
async def red_delete_data_for_user(
|
||||
self,
|
||||
*,
|
||||
requester: Literal["discord_deleted_user", "owner", "user", "user_strict"],
|
||||
user_id: int,
|
||||
):
|
||||
pass
|
||||
|
|
|
@ -1,7 +0,0 @@
|
|||
from .events import Events
|
||||
|
||||
|
||||
def setup(bot):
|
||||
n = Events(bot)
|
||||
bot.add_cog(n)
|
||||
bot.loop.create_task(n.update_events())
|
254
events/events.py
254
events/events.py
|
@ -1,254 +0,0 @@
|
|||
import discord
|
||||
from redbot.core import checks, commands
|
||||
from redbot.core.utils.chat_formatting import *
|
||||
from redbot.core import Config
|
||||
|
||||
import time
|
||||
import random
|
||||
import asyncio
|
||||
import datetime
|
||||
import pytz
|
||||
from tzlocal import get_localzone
|
||||
|
||||
|
||||
basic_colors = [
|
||||
discord.Colour.blue(),
|
||||
discord.Colour.teal(),
|
||||
discord.Colour.dark_teal(),
|
||||
discord.Colour.green(),
|
||||
discord.Colour.dark_green(),
|
||||
discord.Colour.dark_blue(),
|
||||
discord.Colour.purple(),
|
||||
discord.Colour.dark_purple(),
|
||||
discord.Colour.magenta(),
|
||||
discord.Colour.gold(),
|
||||
discord.Colour.orange(),
|
||||
discord.Colour.red(),
|
||||
discord.Colour.dark_red(),
|
||||
discord.Colour.blurple(),
|
||||
discord.Colour.greyple(),
|
||||
]
|
||||
|
||||
|
||||
class Events(commands.Cog):
|
||||
"""
|
||||
Set events that track time since set events
|
||||
"""
|
||||
|
||||
def __init__(self, bot):
|
||||
super().__init__()
|
||||
self.config = Config.get_conf(self, identifier=6748392754)
|
||||
self.timezone = get_localzone()
|
||||
self.bot = bot
|
||||
# set default values
|
||||
self.config.register_guild(events={}, channel=0)
|
||||
|
||||
@commands.group()
|
||||
@commands.guild_only()
|
||||
async def event(self, ctx):
|
||||
"""
|
||||
Track time since event occured.
|
||||
"""
|
||||
pass
|
||||
|
||||
@event.command(name="add")
|
||||
async def addevent(self, ctx, start_time: str, *, event_name: str = ""):
|
||||
"""
|
||||
Add event to track. If start time is not given, the current data and time is used.
|
||||
Start time should be a UNIX timestamp in UTC.
|
||||
"""
|
||||
guild = ctx.guild
|
||||
channel_id = await self.config.guild(guild).channel()
|
||||
if channel_id == 0:
|
||||
await ctx.send("Channel not setup, use ``{}eventset channel` to set channel for events.".format(ctx.prefix))
|
||||
return
|
||||
channel = self.bot.get_channel(channel_id)
|
||||
if not channel:
|
||||
await ctx.send("Channel set not found, please setup channel.")
|
||||
return
|
||||
try:
|
||||
start_time = datetime.datetime.utcfromtimestamp(int(start_time))
|
||||
except:
|
||||
event_name = start_time + " " + event_name
|
||||
start_time = datetime.datetime.utcnow()
|
||||
|
||||
elapsed_time = datetime.datetime.utcnow() - start_time
|
||||
embed = discord.Embed(title=event_name, colour=random.choice(basic_colors))
|
||||
embed.add_field(
|
||||
name="Event time",
|
||||
value=start_time.replace(tzinfo=pytz.utc).astimezone(self.timezone).strftime("%b %d, %Y, %H:%M"),
|
||||
)
|
||||
day_msg = "{} day{},".format(elapsed_time.days, "s" if elapsed_time.days > 1 else "")
|
||||
hour_msg = " {} hour{}".format(
|
||||
int(elapsed_time.seconds / 60 / 60), "s" if int(elapsed_time.seconds / 60 / 60) > 1 else ""
|
||||
)
|
||||
if elapsed_time.days > 0 or int(elapsed_time.seconds / 60 / 60) > 0:
|
||||
minute_msg = ", and {} minute{}".format(
|
||||
int(elapsed_time.seconds / 60 - int(elapsed_time.seconds / 60 / 60) * 60),
|
||||
"s" if int(elapsed_time.seconds / 60 - int(elapsed_time.seconds / 60 / 60) * 60) > 1 else "",
|
||||
)
|
||||
else:
|
||||
minute_msg = "{} minute{}".format(
|
||||
int(elapsed_time.seconds / 60 - int(elapsed_time.seconds / 60 / 60) * 60),
|
||||
"s" if int(elapsed_time.seconds / 60 - int(elapsed_time.seconds / 60 / 60) * 60) > 1 else "",
|
||||
)
|
||||
msg = "{}{}{}".format(
|
||||
day_msg if elapsed_time.days > 0 else "",
|
||||
hour_msg if int(elapsed_time.seconds / 60 / 60) > 0 else "",
|
||||
minute_msg,
|
||||
)
|
||||
embed.add_field(name="Elapsed time", value=msg)
|
||||
message = await channel.send(embed=embed)
|
||||
async with self.config.guild(guild).events() as events:
|
||||
new_event = {"start_time": int(start_time.replace(tzinfo=pytz.utc).timestamp()), "name": event_name}
|
||||
events[message.id] = new_event
|
||||
await ctx.send("Event added!")
|
||||
|
||||
@event.command(name="del")
|
||||
async def delevent(self, ctx):
|
||||
"""
|
||||
Delete an event. Interactive deletion, so just run the command.
|
||||
"""
|
||||
guild = ctx.guild
|
||||
channel_id = await self.config.guild(guild).channel()
|
||||
if channel_id == 0:
|
||||
await ctx.send("Channel not setup, use `{}eventset channel` to set channel for events.".format(ctx.prefix))
|
||||
return
|
||||
channel = self.bot.get_channel(channel_id)
|
||||
if not channel:
|
||||
await ctx.send("Channel set not found, please setup channel.")
|
||||
return
|
||||
|
||||
counter = 0
|
||||
msg = "```"
|
||||
async with self.config.guild(guild).events() as events:
|
||||
for num, event in events.items():
|
||||
msg += "{}\t{}\n".format(counter, event["name"])
|
||||
if len(msg + "```") + 100 > 2000:
|
||||
msg += "```"
|
||||
await ctx.send(msg)
|
||||
msg = "```"
|
||||
counter += 1
|
||||
msg += "```"
|
||||
await ctx.send(msg)
|
||||
await ctx.send("Please choose which event you want to delete. (type number in chat)")
|
||||
|
||||
def m_check(m):
|
||||
try:
|
||||
return (
|
||||
m.author.id == ctx.author.id
|
||||
and m.channel.id == ctx.channel.id
|
||||
and int(m.content) <= counter
|
||||
and int(m.content) >= 0
|
||||
)
|
||||
except:
|
||||
return False
|
||||
|
||||
try:
|
||||
response = await self.bot.wait_for("message", timeout=30, check=m_check)
|
||||
except:
|
||||
await ctx.send("Timed out, event deletion cancelled.")
|
||||
return
|
||||
for i, num in enumerate(events.keys()):
|
||||
if i == int(response.content):
|
||||
event_num = num
|
||||
try:
|
||||
message = await channel.fetch_message(event_num)
|
||||
await message.delete()
|
||||
except:
|
||||
await ctx.send("Event message in {} was not found.".format(channel.mention))
|
||||
|
||||
await ctx.send("{} has been deleted!".format(events[event_num]["name"]))
|
||||
del events[event_num]
|
||||
|
||||
@event.command(name="list")
|
||||
async def listevent(self, ctx):
|
||||
"""
|
||||
List all events for server.
|
||||
"""
|
||||
guild = ctx.guild
|
||||
msg = "```\n"
|
||||
async with self.config.guild(guild).events() as events:
|
||||
if len(events) == 0:
|
||||
msg += "None"
|
||||
for num, event in events.items():
|
||||
msg += "{}\n".format(event["name"])
|
||||
if len(msg + "```") + 3 > 2000:
|
||||
msg += "```"
|
||||
await ctx.send(msg)
|
||||
msg = "```"
|
||||
|
||||
msg += "```"
|
||||
await ctx.send(msg)
|
||||
|
||||
@commands.group()
|
||||
@commands.guild_only()
|
||||
@checks.admin_or_permissions(administrator=True)
|
||||
async def eventset(self, ctx: commands.Context):
|
||||
"""Manages event settings"""
|
||||
pass
|
||||
|
||||
@eventset.command(name="channel")
|
||||
async def _channel_set(self, ctx, channel: discord.TextChannel):
|
||||
"""
|
||||
Set channel to send event messages too
|
||||
"""
|
||||
guild = ctx.guild
|
||||
await self.config.guild(guild).channel.set(channel.id)
|
||||
await ctx.send("Channel now set to {}".format(channel.mention))
|
||||
|
||||
async def update_events(self):
|
||||
while True:
|
||||
if self is not self.bot.get_cog("Events"):
|
||||
print("events cog has been lost")
|
||||
return
|
||||
guilds = self.bot.guilds
|
||||
for guild in guilds:
|
||||
async with self.config.guild(guild).events() as events:
|
||||
channel_id = await self.config.guild(guild).channel()
|
||||
if channel_id == 0:
|
||||
continue
|
||||
channel = self.bot.get_channel(channel_id)
|
||||
if channel is None:
|
||||
continue
|
||||
for message_id, event in events.items():
|
||||
try:
|
||||
message = await channel.fetch_message(message_id)
|
||||
except:
|
||||
continue
|
||||
start_time = datetime.datetime.utcfromtimestamp(event["start_time"])
|
||||
elapsed_time = datetime.datetime.utcnow() - start_time
|
||||
embed = message.embeds[0]
|
||||
embed.clear_fields()
|
||||
embed.add_field(
|
||||
name="Event time",
|
||||
value=start_time.replace(tzinfo=pytz.utc)
|
||||
.astimezone(self.timezone)
|
||||
.strftime("%b %d, %Y, %H:%M"),
|
||||
)
|
||||
day_msg = "{} day{},".format(elapsed_time.days, "s" if elapsed_time.days > 1 else "")
|
||||
hour_msg = " {} hour{}".format(
|
||||
int(elapsed_time.seconds / 60 / 60), "s" if int(elapsed_time.seconds / 60 / 60) > 1 else ""
|
||||
)
|
||||
if elapsed_time.days > 0 or int(elapsed_time.seconds / 60 / 60) > 0:
|
||||
minute_msg = ", and {} minute{}".format(
|
||||
int(elapsed_time.seconds / 60 - int(elapsed_time.seconds / 60 / 60) * 60),
|
||||
"s"
|
||||
if int(elapsed_time.seconds / 60 - int(elapsed_time.seconds / 60 / 60) * 60) > 1
|
||||
else "",
|
||||
)
|
||||
else:
|
||||
minute_msg = "{} minute{}".format(
|
||||
int(elapsed_time.seconds / 60 - int(elapsed_time.seconds / 60 / 60) * 60),
|
||||
"s"
|
||||
if int(elapsed_time.seconds / 60 - int(elapsed_time.seconds / 60 / 60) * 60) > 1
|
||||
else "",
|
||||
)
|
||||
msg = "{}{}{}".format(
|
||||
day_msg if elapsed_time.days > 0 else "",
|
||||
hour_msg if int(elapsed_time.seconds / 60 / 60) > 0 else "",
|
||||
minute_msg,
|
||||
)
|
||||
embed.add_field(name="Elapsed time", value=msg)
|
||||
await message.edit(embed=embed)
|
||||
await asyncio.sleep(30)
|
|
@ -1,5 +1,6 @@
|
|||
from .isolate import Isolate
|
||||
|
||||
__red_end_user_data_statement__ = "This cog stores members who are currently isolated for moderation purposes."
|
||||
|
||||
async def setup(bot):
|
||||
isolate = Isolate(bot)
|
||||
|
|
|
@ -11,6 +11,7 @@ from .memoizer import Memoizer
|
|||
# general
|
||||
import asyncio
|
||||
from datetime import datetime
|
||||
from typing import Literal
|
||||
import inspect
|
||||
import logging
|
||||
import time
|
||||
|
@ -1430,3 +1431,11 @@ class Isolate(commands.Cog):
|
|||
msg += "\n\nOriginal reason was: " + member_data["reason"]
|
||||
|
||||
await self._unisolate(member, reason=msg, apply_roles=False, update=True, quiet=True)
|
||||
|
||||
async def red_delete_data_for_user(
|
||||
self,
|
||||
*,
|
||||
requester: Literal["discord_deleted_user", "owner", "user", "user_strict"],
|
||||
user_id: int,
|
||||
):
|
||||
pass
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
from .markov import Markov
|
||||
|
||||
__red_end_user_data_statement__ = "This doesn't store any user data."
|
||||
|
||||
def setup(bot):
|
||||
bot.add_cog(Markov(bot))
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
from redbot.core.utils.chat_formatting import *
|
||||
from redbot.core import Config, checks, commands
|
||||
from typing import Literal
|
||||
import discord
|
||||
import random
|
||||
import asyncio
|
||||
|
@ -193,3 +194,11 @@ class Markov(commands.Cog):
|
|||
model[str(message.channel.id)][content[i]].append(content[i + 1])
|
||||
|
||||
self.cache[guild.id]["model"] = model
|
||||
|
||||
async def red_delete_data_for_user(
|
||||
self,
|
||||
*,
|
||||
requester: Literal["discord_deleted_user", "owner", "user", "user_strict"],
|
||||
user_id: int,
|
||||
):
|
||||
pass
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
from .memeify import Memeify
|
||||
|
||||
__red_end_user_data_statement__ = "This cog does not store user data."
|
||||
|
||||
def setup(bot):
|
||||
bot.add_cog(Memeify(bot))
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
from redbot.core import Config, commands
|
||||
from redbot.core.utils.chat_formatting import pagify
|
||||
from typing import Literal
|
||||
import re
|
||||
import random
|
||||
import string
|
||||
|
@ -294,3 +295,11 @@ class Memeify(commands.Cog):
|
|||
text = text[:-1]
|
||||
|
||||
return text
|
||||
|
||||
async def red_delete_data_for_user(
|
||||
self,
|
||||
*,
|
||||
requester: Literal["discord_deleted_user", "owner", "user", "user_strict"],
|
||||
user_id: int,
|
||||
):
|
||||
pass
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
from .moreadmin import MoreAdmin
|
||||
|
||||
__red_end_user_data_statement__ = "This will store a user's last few messages (depending on configuration)"
|
||||
|
||||
def setup(bot):
|
||||
bot.add_cog(MoreAdmin(bot))
|
||||
|
|
|
@ -7,6 +7,7 @@ from redbot.core.data_manager import cog_data_path
|
|||
import discord
|
||||
|
||||
from .utils import *
|
||||
from typing import Literal
|
||||
import asyncio
|
||||
from typing import Union
|
||||
import os
|
||||
|
@ -1069,3 +1070,11 @@ class MoreAdmin(commands.Cog):
|
|||
|
||||
if to_add:
|
||||
await self.add_last_msg(message)
|
||||
|
||||
async def red_delete_data_for_user(
|
||||
self,
|
||||
*,
|
||||
requester: Literal["discord_deleted_user", "owner", "user", "user_strict"],
|
||||
user_id: int,
|
||||
):
|
||||
pass
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
from .nitroemoji import NitroEmoji
|
||||
|
||||
__red_end_user_data_statement__ = "This cog will store a user's custom emojis in each guild."
|
||||
|
||||
async def setup(bot):
|
||||
n = NitroEmoji(bot)
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
from redbot.core.utils.chat_formatting import *
|
||||
from redbot.core import Config, checks, commands, bank
|
||||
from redbot.core.data_manager import cog_data_path
|
||||
from typing import Literal
|
||||
import discord
|
||||
|
||||
import aiohttp
|
||||
|
@ -359,3 +360,11 @@ class NitroEmoji(commands.Cog):
|
|||
break
|
||||
except ValueError:
|
||||
pass
|
||||
|
||||
async def red_delete_data_for_user(
|
||||
self,
|
||||
*,
|
||||
requester: Literal["discord_deleted_user", "owner", "user", "user_strict"],
|
||||
user_id: int,
|
||||
):
|
||||
pass
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
from .personalroles import PersonalRoles
|
||||
|
||||
__red_end_user_data_statement__ = "This will store what a user's custom role is if they have one."
|
||||
|
||||
def setup(bot):
|
||||
bot.add_cog(PersonalRoles(bot))
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
"install_msg": "Thanks for install.",
|
||||
"short": "Personal roles for members",
|
||||
"description": "Personal roles for members",
|
||||
"min_bot_version": "3.2.1",
|
||||
"min_bot_version": "3.4.0",
|
||||
"tags": [
|
||||
"myrole",
|
||||
"personal role",
|
||||
|
@ -15,6 +15,5 @@
|
|||
"requirements": [
|
||||
"tabulate"
|
||||
],
|
||||
"min_bot_version": "3.4.0",
|
||||
"end_user_data_statement": "This will store what a user's custom role is if they have one."
|
||||
}
|
||||
|
|
|
@ -9,6 +9,7 @@ from redbot.core.utils import chat_formatting as chat
|
|||
from redbot.core.utils.menus import menu, DEFAULT_CONTROLS
|
||||
from redbot.core.utils.mod import get_audit_reason
|
||||
from tabulate import tabulate
|
||||
from typing import Literal
|
||||
import asyncio
|
||||
|
||||
_ = Translator("PersonalRoles", __file__)
|
||||
|
@ -434,3 +435,11 @@ class PersonalRoles(commands.Cog):
|
|||
await role.delete()
|
||||
except:
|
||||
pass
|
||||
|
||||
async def red_delete_data_for_user(
|
||||
self,
|
||||
*,
|
||||
requester: Literal["discord_deleted_user", "owner", "user", "user_strict"],
|
||||
user_id: int,
|
||||
):
|
||||
pass
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
from .pony import Pony
|
||||
|
||||
__red_end_user_data_statement__ = "This doesn't store any user data."
|
||||
|
||||
def setup(bot):
|
||||
bot.add_cog(Pony())
|
||||
|
|
|
@ -2,6 +2,7 @@ import discord
|
|||
from redbot.core.utils.chat_formatting import *
|
||||
from redbot.core import Config, checks, commands
|
||||
from urllib import parse
|
||||
from typing import Literal
|
||||
import aiohttp
|
||||
import os
|
||||
import traceback
|
||||
|
@ -373,3 +374,11 @@ class Pony(commands.Cog):
|
|||
return await message.edit(content=f"Artists: `{artists}`\n{output}")
|
||||
else:
|
||||
return await message.edit(content=output)
|
||||
|
||||
async def red_delete_data_for_user(
|
||||
self,
|
||||
*,
|
||||
requester: Literal["discord_deleted_user", "owner", "user", "user_strict"],
|
||||
user_id: int,
|
||||
):
|
||||
pass
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
from .punish import Punish
|
||||
|
||||
__red_end_user_data_statement__ = "This will store who is currently punished in each guild."
|
||||
|
||||
async def setup(bot):
|
||||
punish = Punish(bot)
|
||||
|
|
|
@ -17,5 +17,5 @@
|
|||
"brandons209",
|
||||
"punish"
|
||||
],
|
||||
"end_user_data_statement": "This will store who is currently punished."
|
||||
"end_user_data_statement": "This will store who is currently punished in each guild."
|
||||
}
|
||||
|
|
|
@ -11,6 +11,7 @@ from .memoizer import Memoizer
|
|||
# general
|
||||
import asyncio
|
||||
from datetime import datetime
|
||||
from typing import Literal
|
||||
import inspect
|
||||
import logging
|
||||
import time
|
||||
|
@ -1497,3 +1498,11 @@ class Punish(commands.Cog):
|
|||
msg += "\n\nOriginal reason was: " + member_data["reason"]
|
||||
|
||||
await self._unpunish(member, reason=msg, apply_roles=False, update=True, quiet=True)
|
||||
|
||||
async def red_delete_data_for_user(
|
||||
self,
|
||||
*,
|
||||
requester: Literal["discord_deleted_user", "owner", "user", "user_strict"],
|
||||
user_id: int,
|
||||
):
|
||||
pass
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
from .reactpoll import ReactPoll
|
||||
|
||||
__red_end_user_data_statement__ = "This cog won't store user data."
|
||||
|
||||
def setup(bot):
|
||||
n = ReactPoll(bot)
|
||||
|
|
|
@ -8,6 +8,7 @@ import asyncio
|
|||
import re
|
||||
import time
|
||||
from datetime import datetime, timedelta
|
||||
from typing import Literal
|
||||
from .time_utils import *
|
||||
|
||||
# May need to not save on every reaction add if it causes too much lag
|
||||
|
@ -292,6 +293,14 @@ class NewReactPoll:
|
|||
del self.poll_sessions[str(self.channel.id)]
|
||||
await self.main.delete_poll(self)
|
||||
|
||||
async def red_delete_data_for_user(
|
||||
self,
|
||||
*,
|
||||
requester: Literal["discord_deleted_user", "owner", "user", "user_strict"],
|
||||
user_id: int,
|
||||
):
|
||||
pass
|
||||
|
||||
|
||||
class LoadedPoll(NewReactPoll):
|
||||
"""A reaction poll loaded from disk"""
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
from .core import RoleManagement
|
||||
|
||||
__red_end_user_data_statement__ = "This will only store sticky and subscribed roles for users."
|
||||
|
||||
def setup(bot):
|
||||
cog = RoleManagement(bot)
|
||||
|
|
|
@ -5,7 +5,7 @@ import asyncio
|
|||
import re
|
||||
import time
|
||||
from abc import ABCMeta
|
||||
from typing import AsyncIterator, Tuple, Optional, Union, List, Dict
|
||||
from typing import AsyncIterator, Tuple, Optional, Union, List, Dict, Literal
|
||||
|
||||
import discord
|
||||
from discord.ext.commands import CogMeta as DPYCogMeta
|
||||
|
@ -1108,3 +1108,11 @@ class RoleManagement(
|
|||
for em, rdata in _outer.items():
|
||||
if rdata and rdata["roleid"] == role.id:
|
||||
yield (mid, em, rdata)
|
||||
|
||||
async def red_delete_data_for_user(
|
||||
self,
|
||||
*,
|
||||
requester: Literal["discord_deleted_user", "owner", "user", "user_strict"],
|
||||
user_id: int,
|
||||
):
|
||||
pass
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
"DiscordLiz",
|
||||
"brandons209"
|
||||
],
|
||||
"install_msg": "If you need help, I have a channel in https://discord.gg/mb85deu",
|
||||
"install_msg": "Thank you for using RoleManagement!",
|
||||
"name": "RoleManagement",
|
||||
"disabled": false,
|
||||
"short": "Role searches, reactroles, requirements for roles, etc.",
|
||||
|
@ -18,5 +18,5 @@
|
|||
],
|
||||
"hidden": false,
|
||||
"min_bot_version": "3.4.0",
|
||||
"end_user_data_statement": "This will only store sticky roles for users."
|
||||
"end_user_data_statement": "This will only store sticky and subscribed roles for users."
|
||||
}
|
||||
|
|
|
@ -2,6 +2,7 @@ import os
|
|||
from .roleplay import RolePlay
|
||||
from redbot.core import Config
|
||||
|
||||
__red_end_user_data_statement__ = "No data is stored."
|
||||
|
||||
def setup(bot):
|
||||
bot.add_cog(RolePlay(bot))
|
||||
|
|
|
@ -3,6 +3,7 @@ from redbot.core.utils.chat_formatting import italics, pagify, box
|
|||
from redbot.core import Config, checks, commands
|
||||
import random
|
||||
from random import choice
|
||||
from typing import Literal
|
||||
|
||||
import asyncio
|
||||
import os
|
||||
|
@ -439,3 +440,11 @@ class RolePlay(commands.Cog):
|
|||
await ctx.send(msg + "(╯°□°)╯︵ " + name[::-1])
|
||||
else:
|
||||
await ctx.send("*flips a coin and... " + choice(["HEADS!*", "TAILS!*"]))
|
||||
|
||||
async def red_delete_data_for_user(
|
||||
self,
|
||||
*,
|
||||
requester: Literal["discord_deleted_user", "owner", "user", "user_strict"],
|
||||
user_id: int,
|
||||
):
|
||||
pass
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
from .roletracker import RoleTracker
|
||||
|
||||
__red_end_user_data_statement__ = "This cog stores the users who have a trackable role."
|
||||
|
||||
async def setup(bot):
|
||||
roletracker = RoleTracker(bot)
|
||||
|
|
|
@ -15,5 +15,5 @@
|
|||
"brandons209",
|
||||
"pancakesparkle"
|
||||
],
|
||||
"end_user_data_statement": "Depending on setup, can log user messages, voice channel activity, audit actions in guilds, activity statistics per guild, user name changes, and any moderation actions per guild."
|
||||
"end_user_data_statement": "This cog stores the users who have a trackable role."
|
||||
}
|
||||
|
|
|
@ -6,6 +6,7 @@ from datetime import datetime
|
|||
from redbot.core import checks, commands, Config, modlog
|
||||
from redbot.core.utils.chat_formatting import pagify
|
||||
from redbot.core.utils.predicates import MessagePredicate
|
||||
from typing import Literal
|
||||
|
||||
try:
|
||||
from redbot.core.commands import GuildContext
|
||||
|
@ -267,3 +268,11 @@ class RoleTracker(commands.Cog):
|
|||
await case.edit(edits)
|
||||
|
||||
await self.config.role(role).USERS.set(data)
|
||||
|
||||
async def red_delete_data_for_user(
|
||||
self,
|
||||
*,
|
||||
requester: Literal["discord_deleted_user", "owner", "user", "user_strict"],
|
||||
user_id: int,
|
||||
):
|
||||
pass
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
from .rules import Rules
|
||||
|
||||
__red_end_user_data_statement__ = "This only stores rules added by admins of guilds."
|
||||
|
||||
def setup(bot):
|
||||
bot.add_cog(Rules(bot))
|
||||
|
|
|
@ -3,7 +3,7 @@ from redbot.core import checks, commands, Config
|
|||
from redbot.core.utils import chat_formatting as chat
|
||||
from redbot.core.utils.menus import menu, DEFAULT_CONTROLS
|
||||
import asyncio
|
||||
from typing import Union
|
||||
from typing import Union, Literal
|
||||
|
||||
|
||||
class Rules(commands.Cog):
|
||||
|
@ -137,3 +137,11 @@ class Rules(commands.Cog):
|
|||
async with self.config.channel(channel).rules() as rules:
|
||||
rules[str(rule_num)] = rule
|
||||
await ctx.tick()
|
||||
|
||||
async def red_delete_data_for_user(
|
||||
self,
|
||||
*,
|
||||
requester: Literal["discord_deleted_user", "owner", "user", "user_strict"],
|
||||
user_id: int,
|
||||
):
|
||||
pass
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
from .sfx import SFX
|
||||
|
||||
__red_end_user_data_statement__ = "This doesn't store any user data."
|
||||
|
||||
def setup(bot):
|
||||
bot.add_cog(SFX(bot))
|
||||
|
|
|
@ -7,6 +7,7 @@ import os
|
|||
import glob
|
||||
import asyncio
|
||||
from difflib import get_close_matches
|
||||
from typing import Literal
|
||||
import tabulate
|
||||
|
||||
from .utils import saysound, code_path
|
||||
|
@ -363,3 +364,11 @@ class SFX(commands.Cog):
|
|||
except:
|
||||
await ctx.send("Please allow DMs from server members so I can DM you the list!")
|
||||
return
|
||||
|
||||
async def red_delete_data_for_user(
|
||||
self,
|
||||
*,
|
||||
requester: Literal["discord_deleted_user", "owner", "user", "user_strict"],
|
||||
user_id: int,
|
||||
):
|
||||
pass
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
from .shootout import Shootout
|
||||
|
||||
__red_end_user_data_statement__ = "This cog won't store anything for a user."
|
||||
|
||||
def setup(bot):
|
||||
bot.add_cog(Shootout(bot))
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
from redbot.core import bank, commands, checks, Config
|
||||
from redbot.core.utils.chat_formatting import *
|
||||
import asyncio, contextlib, discord, random, shlex
|
||||
|
||||
from typing import Literal
|
||||
|
||||
class Shootout(commands.Cog):
|
||||
default_config = {
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
from .smartreact import SmartReact
|
||||
|
||||
__red_end_user_data_statement__ = "This doesn't store any user data."
|
||||
|
||||
def setup(bot):
|
||||
bot.add_cog(SmartReact(bot))
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
import discord
|
||||
from redbot.core import Config, commands, checks
|
||||
from redbot.core.utils.chat_formatting import pagify
|
||||
|
||||
from typing import Literal
|
||||
|
||||
class SmartReact(commands.Cog):
|
||||
"""Create automatic reactions when trigger words are typed in chat"""
|
||||
|
@ -137,3 +137,11 @@ class SmartReact(commands.Cog):
|
|||
pass
|
||||
except discord.errors.InvalidArgument:
|
||||
pass
|
||||
|
||||
async def red_delete_data_for_user(
|
||||
self,
|
||||
*,
|
||||
requester: Literal["discord_deleted_user", "owner", "user", "user_strict"],
|
||||
user_id: int,
|
||||
):
|
||||
pass
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
from .trickortreat import TrickorTreat
|
||||
|
||||
__red_end_user_data_statement__ = "This doesn't store any user data."
|
||||
|
||||
def setup(bot):
|
||||
bot.add_cog(TrickorTreat(bot))
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
from redbot.core.utils.chat_formatting import *
|
||||
from redbot.core import Config, checks, commands, bank
|
||||
from redbot.core.utils.predicates import MessagePredicate
|
||||
from typing import Literal
|
||||
import discord
|
||||
import asyncio
|
||||
import random
|
||||
|
@ -313,3 +314,11 @@ class TrickorTreat(commands.Cog):
|
|||
await bank.withdraw_credits(ctx.author, amount)
|
||||
|
||||
await self.config.member(ctx.author).last_pay.set(time.time())
|
||||
|
||||
async def red_delete_data_for_user(
|
||||
self,
|
||||
*,
|
||||
requester: Literal["discord_deleted_user", "owner", "user", "user_strict"],
|
||||
user_id: int,
|
||||
):
|
||||
pass
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
from redbot.core.bot import Red
|
||||
|
||||
from .welcome import Welcome
|
||||
|
||||
__red_end_user_data_statement__ = "This cog doesn't store any user data."
|
||||
|
||||
def setup(bot: Red):
|
||||
bot.add_cog(Welcome(bot=bot))
|
||||
|
|
|
@ -3,7 +3,7 @@ import datetime
|
|||
import discord
|
||||
import logging
|
||||
import random
|
||||
from typing import Optional, Union
|
||||
from typing import Optional, Union, Literal
|
||||
|
||||
from redbot.core import Config, checks, commands
|
||||
from redbot.core.utils.chat_formatting import box, pagify, humanize_list
|
||||
|
@ -899,3 +899,11 @@ class Welcome(commands.Cog):
|
|||
"""Gets today's date in ordinal form."""
|
||||
|
||||
return datetime.date.today().toordinal()
|
||||
|
||||
async def red_delete_data_for_user(
|
||||
self,
|
||||
*,
|
||||
requester: Literal["discord_deleted_user", "owner", "user", "user_strict"],
|
||||
user_id: int,
|
||||
):
|
||||
pass
|
||||
|
|
Loading…
Reference in a new issue