mirror of
https://github.com/brandons209/Red-bot-Cogs.git
synced 2024-04-30 10:32:36 +12:00
add clear options for member data for markov, added discord timestamp to welcomes
This commit is contained in:
parent
e7d1832e07
commit
f6b1a3439d
|
@ -27,7 +27,7 @@ class Markov(commands.Cog):
|
||||||
for guild in self.bot.guilds:
|
for guild in self.bot.guilds:
|
||||||
asyncio.create_task(self.config.guild(guild).model.set(self.cache[guild.id]["model"]))
|
asyncio.create_task(self.config.guild(guild).model.set(self.cache[guild.id]["model"]))
|
||||||
for member in guild.members:
|
for member in guild.members:
|
||||||
asyncio.create_task(self.config.member(member).model.set(self.mem_cache[member.id]["model"]))
|
asyncio.create_task(self.config.member(member).model.set(self.mem_cache[guild.id][member.id]["model"]))
|
||||||
|
|
||||||
async def init(self):
|
async def init(self):
|
||||||
await self.bot.wait_until_ready()
|
await self.bot.wait_until_ready()
|
||||||
|
@ -35,9 +35,10 @@ class Markov(commands.Cog):
|
||||||
# slows down once file gets big otherwise
|
# slows down once file gets big otherwise
|
||||||
for guild in self.bot.guilds:
|
for guild in self.bot.guilds:
|
||||||
self.cache[guild.id] = await self.config.guild(guild).all()
|
self.cache[guild.id] = await self.config.guild(guild).all()
|
||||||
|
self.mem_cache[guild.id] = {}
|
||||||
if self.cache[guild.id]["member_model"]:
|
if self.cache[guild.id]["member_model"]:
|
||||||
for member in guild.members:
|
for member in guild.members:
|
||||||
self.mem_cache[member.id] = await self.config.member(member).all()
|
self.mem_cache[guild.id][member.id] = await self.config.member(member).all()
|
||||||
|
|
||||||
while True: # save model every 5 minutes
|
while True: # save model every 5 minutes
|
||||||
await asyncio.sleep(300)
|
await asyncio.sleep(300)
|
||||||
|
@ -45,7 +46,7 @@ class Markov(commands.Cog):
|
||||||
await self.config.guild(guild).model.set(self.cache[guild.id]["model"])
|
await self.config.guild(guild).model.set(self.cache[guild.id]["model"])
|
||||||
if self.cache[guild.id]["member_model"]:
|
if self.cache[guild.id]["member_model"]:
|
||||||
for member in guild.members:
|
for member in guild.members:
|
||||||
await self.config.member(member).model.set(self.mem_cache[member.id]["model"])
|
await self.config.member(member).model.set(self.mem_cache[guild.id][member.id]["model"])
|
||||||
|
|
||||||
@commands.group()
|
@commands.group()
|
||||||
@checks.admin_or_permissions(administrator=True)
|
@checks.admin_or_permissions(administrator=True)
|
||||||
|
@ -68,17 +69,45 @@ class Markov(commands.Cog):
|
||||||
|
|
||||||
self.cache[ctx.guild.id]["member_model"] = toggle
|
self.cache[ctx.guild.id]["member_model"] = toggle
|
||||||
await self.config.guild(ctx.guild).member_model.set(toggle)
|
await self.config.guild(ctx.guild).member_model.set(toggle)
|
||||||
|
|
||||||
|
if toggle:
|
||||||
|
for member in ctx.guild.members:
|
||||||
|
self.mem_cache[ctx.guild.id] = {}
|
||||||
|
self.mem_cache[ctx.guild.id][member.id] = await self.config.member(member).all()
|
||||||
|
|
||||||
await ctx.tick()
|
await ctx.tick()
|
||||||
|
|
||||||
@markovset.command(name="clear")
|
@markovset.command(name="clear")
|
||||||
async def markovset_clear(self, ctx, *, channel: discord.TextChannel):
|
async def markovset_clear(self, ctx, *, clear: Union[discord.TextChannel, discord.Member]):
|
||||||
"""Clear data for a specific channel"""
|
"""Clear data for a specific channel or member"""
|
||||||
async with self.config.guild(ctx.guild).model() as model:
|
if isinstance(clear, discord.TextChannel):
|
||||||
del self.cache[ctx.guild.id]["model"][str(channel.id)]
|
async with self.config.guild(ctx.guild).model() as model:
|
||||||
try: # possible that channel is cached but not saved yet
|
del self.cache[ctx.guild.id]["model"][str(clear.id)]
|
||||||
del model[str(channel.id)]
|
try: # possible that channel is cached but not saved yet
|
||||||
except:
|
del model[str(clear.id)]
|
||||||
pass
|
except:
|
||||||
|
pass
|
||||||
|
elif isinstance(clear, discord.Member):
|
||||||
|
async with self.config.member(clear).model() as model:
|
||||||
|
try:
|
||||||
|
self.mem_cache[ctx.guild.id][clear.id]["model"].clear()
|
||||||
|
except:
|
||||||
|
# memember models may not be used, other issues, just ignore
|
||||||
|
pass
|
||||||
|
model.clear()
|
||||||
|
|
||||||
|
await ctx.tick()
|
||||||
|
|
||||||
|
@markovset.command(name="mem-clear")
|
||||||
|
async def markovset_memclear(self, ctx, yesno: bool):
|
||||||
|
"""Clear data for **all** members in a guild"""
|
||||||
|
|
||||||
|
if yesno:
|
||||||
|
await self.config.clear_all_members(guild=ctx.guild)
|
||||||
|
del self.mem_cache[ctx.guild.id]
|
||||||
|
else:
|
||||||
|
return await ctx.send("Please type `yes` after the command to clear all data.", delete_after=15)
|
||||||
|
|
||||||
await ctx.tick()
|
await ctx.tick()
|
||||||
|
|
||||||
@markovset.command(name="prefix")
|
@markovset.command(name="prefix")
|
||||||
|
@ -124,6 +153,26 @@ class Markov(commands.Cog):
|
||||||
await self.config.guild(ctx.guild).max_len.set(length)
|
await self.config.guild(ctx.guild).max_len.set(length)
|
||||||
await ctx.tick()
|
await ctx.tick()
|
||||||
|
|
||||||
|
@commands.command(name="mclear")
|
||||||
|
@commands.guild_only()
|
||||||
|
@commands.cooldown(rate=1, per=10, type=commands.BucketType.user)
|
||||||
|
async def markov_clear(self, ctx, *, yesno: bool):
|
||||||
|
"""
|
||||||
|
Clear your model data from the guild
|
||||||
|
"""
|
||||||
|
if yesno:
|
||||||
|
async with self.config.member(ctx.author).model() as model:
|
||||||
|
try:
|
||||||
|
self.mem_cache[ctx.guild.id][ctx.author.id]["model"].clear()
|
||||||
|
except:
|
||||||
|
# memember models may not be used, other issues, just ignore
|
||||||
|
pass
|
||||||
|
model.clear()
|
||||||
|
else:
|
||||||
|
return await ctx.send("Please type `yes` after the command to clear all your data.", delete_after=15)
|
||||||
|
|
||||||
|
await ctx.tick()
|
||||||
|
|
||||||
@commands.command(name="markov")
|
@commands.command(name="markov")
|
||||||
@commands.guild_only()
|
@commands.guild_only()
|
||||||
@commands.cooldown(rate=1, per=10, type=commands.BucketType.user)
|
@commands.cooldown(rate=1, per=10, type=commands.BucketType.user)
|
||||||
|
@ -145,17 +194,17 @@ class Markov(commands.Cog):
|
||||||
member_model = self.cache[ctx.guild.id]["member_model"]
|
member_model = self.cache[ctx.guild.id]["member_model"]
|
||||||
if member_model:
|
if member_model:
|
||||||
if isinstance(member, discord.Member):
|
if isinstance(member, discord.Member):
|
||||||
if member.id not in self.mem_cache:
|
if member.id not in self.mem_cache[ctx.guild.id]:
|
||||||
self.mem_cache[member.id] = {}
|
self.mem_cache[ctx.guild.id][member.id] = {}
|
||||||
self.mem_cache[member.id]["model"] = {}
|
self.mem_cache[ctx.guild.id][member.id]["model"] = {}
|
||||||
model = self.mem_cache[member.id]["model"]
|
model = self.mem_cache[ctx.guild.id][member.id]["model"]
|
||||||
elif isinstance(num_text, discord.Member):
|
elif isinstance(num_text, discord.Member):
|
||||||
member = num_text
|
member = num_text
|
||||||
num_text = None
|
num_text = None
|
||||||
if member.id not in self.mem_cache:
|
if member.id not in self.mem_cache[ctx.guild.id]:
|
||||||
self.mem_cache[member.id] = {}
|
self.mem_cache[ctx.guild.id][member.id] = {}
|
||||||
self.mem_cache[member.id]["model"] = {}
|
self.mem_cache[ctx.guild.id][member.id]["model"] = {}
|
||||||
model = self.mem_cache[member.id]["model"]
|
model = self.mem_cache[ctx.guild.id][member.id]["model"]
|
||||||
else:
|
else:
|
||||||
member_model = False
|
member_model = False
|
||||||
model = self.cache[ctx.guild.id]["model"]
|
model = self.cache[ctx.guild.id]["model"]
|
||||||
|
@ -266,10 +315,10 @@ class Markov(commands.Cog):
|
||||||
model = self.cache[guild.id]["model"]
|
model = self.cache[guild.id]["model"]
|
||||||
|
|
||||||
if self.cache[guild.id]["member_model"]:
|
if self.cache[guild.id]["member_model"]:
|
||||||
if message.author.id not in self.mem_cache:
|
if message.author.id not in self.mem_cache[guild.id]:
|
||||||
self.mem_cache[message.author.id] = {}
|
self.mem_cache[guild.id][message.author.id] = {}
|
||||||
self.mem_cache[message.author.id]["model"] = {}
|
self.mem_cache[guild.id][message.author.id]["model"] = {}
|
||||||
mem_model = self.mem_cache[message.author.id]["model"]
|
mem_model = self.mem_cache[guild.id][message.author.id]["model"]
|
||||||
|
|
||||||
try:
|
try:
|
||||||
model[str(message.channel.id)]
|
model[str(message.channel.id)]
|
||||||
|
@ -287,7 +336,7 @@ class Markov(commands.Cog):
|
||||||
model[str(message.channel.id)][content[i]].append(content[i + 1])
|
model[str(message.channel.id)][content[i]].append(content[i + 1])
|
||||||
|
|
||||||
self.cache[guild.id]["model"] = model
|
self.cache[guild.id]["model"] = model
|
||||||
self.mem_cache[message.author.id]["model"] = mem_model
|
self.mem_cache[ctx.guild.id][message.author.id]["model"] = mem_model
|
||||||
|
|
||||||
async def red_delete_data_for_user(
|
async def red_delete_data_for_user(
|
||||||
self,
|
self,
|
||||||
|
|
|
@ -406,6 +406,7 @@ class Welcome(commands.Cog):
|
||||||
`{plural}` is an 's' if `count` is not 1, and nothing if it is
|
`{plural}` is an 's' if `count` is not 1, and nothing if it is
|
||||||
`{stats}` to include user stats (if using activitylog cog)
|
`{stats}` to include user stats (if using activitylog cog)
|
||||||
`{roles}` to show member roles at time of event
|
`{roles}` to show member roles at time of event
|
||||||
|
`{joined_on}` is the Discord formated time the user joined the server
|
||||||
|
|
||||||
For example:
|
For example:
|
||||||
{member.name}... Why did you leave???
|
{member.name}... Why did you leave???
|
||||||
|
@ -807,7 +808,14 @@ class Welcome(commands.Cog):
|
||||||
try:
|
try:
|
||||||
return await channel.send(
|
return await channel.send(
|
||||||
format_str.format(
|
format_str.format(
|
||||||
member=user, server=guild, bot=user, count=count or "", plural=plural, roles=roles, stats=stats
|
member=user,
|
||||||
|
server=guild,
|
||||||
|
bot=user,
|
||||||
|
count=count or "",
|
||||||
|
plural=plural,
|
||||||
|
roles=roles,
|
||||||
|
stats=stats,
|
||||||
|
joined_on=f"<t:{int(user.joined_at.timestamp())}>",
|
||||||
),
|
),
|
||||||
allowed_mentions=discord.AllowedMentions.all(),
|
allowed_mentions=discord.AllowedMentions.all(),
|
||||||
)
|
)
|
||||||
|
|
Loading…
Reference in a new issue