mirror of
https://github.com/brandons209/Red-bot-Cogs.git
synced 2024-06-02 02:24:41 +12:00
add blacklist for member models, fix a few bugs
This commit is contained in:
parent
f6b1a3439d
commit
f13cde0140
|
@ -1,6 +1,8 @@
|
||||||
from redbot.core.utils.chat_formatting import *
|
from redbot.core.utils.chat_formatting import *
|
||||||
from redbot.core import Config, checks, commands
|
from redbot.core import Config, checks, commands
|
||||||
from typing import Literal
|
from redbot.core.utils.menus import start_adding_reactions
|
||||||
|
from redbot.core.utils.predicates import ReactionPredicate
|
||||||
|
from typing import Literal, List
|
||||||
import discord
|
import discord
|
||||||
import random
|
import random
|
||||||
import asyncio
|
import asyncio
|
||||||
|
@ -13,7 +15,13 @@ class Markov(commands.Cog):
|
||||||
self.bot = bot
|
self.bot = bot
|
||||||
self.config = Config.get_conf(self, identifier=5989735216541313, force_registration=True)
|
self.config = Config.get_conf(self, identifier=5989735216541313, force_registration=True)
|
||||||
|
|
||||||
default_guild = {"model": {}, "prefixes": [], "max_len": 200, "member_model": False}
|
default_guild = {
|
||||||
|
"model": {},
|
||||||
|
"prefixes": [],
|
||||||
|
"max_len": 200,
|
||||||
|
"member_model": False,
|
||||||
|
"blacklist": [],
|
||||||
|
}
|
||||||
default_member = {"model": {}}
|
default_member = {"model": {}}
|
||||||
self.config.register_guild(**default_guild)
|
self.config.register_guild(**default_guild)
|
||||||
self.config.register_member(**default_member)
|
self.config.register_member(**default_member)
|
||||||
|
@ -56,7 +64,7 @@ class Markov(commands.Cog):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
@markovset.command(name="mem-model")
|
@markovset.command(name="mem-model")
|
||||||
async def memmodel(self, ctx, toggle: bool = None):
|
async def markovset_memmodel(self, ctx, toggle: bool = None):
|
||||||
"""
|
"""
|
||||||
Enable/disable models for each guild member
|
Enable/disable models for each guild member
|
||||||
|
|
||||||
|
@ -77,6 +85,39 @@ class Markov(commands.Cog):
|
||||||
|
|
||||||
await ctx.tick()
|
await ctx.tick()
|
||||||
|
|
||||||
|
@markovset.command(name="blacklist")
|
||||||
|
async def markovset_blacklist(self, ctx, *channels: discord.TextChannel):
|
||||||
|
"""
|
||||||
|
Set channels that markov won't track for member models
|
||||||
|
|
||||||
|
**Does not affect channel markov models**
|
||||||
|
"""
|
||||||
|
if not channels:
|
||||||
|
curr = await self.config.guild(ctx.guild).blacklist()
|
||||||
|
curr = [ctx.guild.get_channel(c) for c in curr]
|
||||||
|
# filter out channels that are deleted
|
||||||
|
curr = [c.mention for c in curr if c is not None]
|
||||||
|
if not curr:
|
||||||
|
return await ctx.send("No channels are currently blacklisted.")
|
||||||
|
|
||||||
|
await ctx.send(f"Current blacklist:\n{humanize_list(curr)}")
|
||||||
|
msg = await ctx.send("React with yes to this message to clear the blacklist.", delete_after=32)
|
||||||
|
start_adding_reactions(msg, ReactionPredicate.YES_OR_NO_EMOJIS)
|
||||||
|
pred = ReactionPredicate.yes_or_no(msg, ctx.author)
|
||||||
|
|
||||||
|
try:
|
||||||
|
await self.bot.wait_for("reaction_add", check=pred, timeout=30)
|
||||||
|
except asyncio.TimeoutError:
|
||||||
|
return
|
||||||
|
|
||||||
|
if pred.result:
|
||||||
|
await self.config.guild(ctx.guild).blacklist.clear()
|
||||||
|
await ctx.tick()
|
||||||
|
return
|
||||||
|
|
||||||
|
await self.config.guild(ctx.guild).blacklist.set([c.id for c in channels])
|
||||||
|
await ctx.tick()
|
||||||
|
|
||||||
@markovset.command(name="clear")
|
@markovset.command(name="clear")
|
||||||
async def markovset_clear(self, ctx, *, clear: Union[discord.TextChannel, discord.Member]):
|
async def markovset_clear(self, ctx, *, clear: Union[discord.TextChannel, discord.Member]):
|
||||||
"""Clear data for a specific channel or member"""
|
"""Clear data for a specific channel or member"""
|
||||||
|
@ -315,6 +356,7 @@ 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"]:
|
||||||
|
blacklist = await self.config.guild(guild).blacklist()
|
||||||
if message.author.id not in self.mem_cache[guild.id]:
|
if message.author.id not in self.mem_cache[guild.id]:
|
||||||
self.mem_cache[guild.id][message.author.id] = {}
|
self.mem_cache[guild.id][message.author.id] = {}
|
||||||
self.mem_cache[guild.id][message.author.id]["model"] = {}
|
self.mem_cache[guild.id][message.author.id]["model"] = {}
|
||||||
|
@ -328,7 +370,7 @@ class Markov(commands.Cog):
|
||||||
for i in range(len(content) - 1):
|
for i in range(len(content) - 1):
|
||||||
if content[i] not in model[str(message.channel.id)]:
|
if content[i] not in model[str(message.channel.id)]:
|
||||||
model[str(message.channel.id)][content[i]] = list()
|
model[str(message.channel.id)][content[i]] = list()
|
||||||
if self.cache[guild.id]["member_model"]:
|
if self.cache[guild.id]["member_model"] and message.channel.id not in blacklist:
|
||||||
if content[i] not in mem_model:
|
if content[i] not in mem_model:
|
||||||
mem_model[content[i]] = list()
|
mem_model[content[i]] = list()
|
||||||
mem_model[content[i]].append(content[i + 1])
|
mem_model[content[i]].append(content[i + 1])
|
||||||
|
@ -336,7 +378,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[ctx.guild.id][message.author.id]["model"] = mem_model
|
self.mem_cache[guild.id][message.author.id]["model"] = mem_model
|
||||||
|
|
||||||
async def red_delete_data_for_user(
|
async def red_delete_data_for_user(
|
||||||
self,
|
self,
|
||||||
|
|
Loading…
Reference in a new issue