mirror of
https://github.com/brandons209/Red-bot-Cogs.git
synced 2024-05-24 06:09:41 +12:00
added clear command to thread rotate, typing for gen graphs
This commit is contained in:
parent
0371a4c103
commit
305cd182c7
|
@ -411,6 +411,7 @@ class ActivityLogger(commands.Cog):
|
|||
else:
|
||||
end_time = date
|
||||
|
||||
async with ctx.channel.typing():
|
||||
# get messages split by channel
|
||||
messages = await self.loop.run_in_executor(
|
||||
None,
|
||||
|
@ -569,6 +570,7 @@ class ActivityLogger(commands.Cog):
|
|||
else:
|
||||
end_time = date
|
||||
|
||||
async with ctx.channel.typing():
|
||||
# get messages split by channel
|
||||
messages = await self.loop.run_in_executor(
|
||||
None,
|
||||
|
@ -637,7 +639,9 @@ class ActivityLogger(commands.Cog):
|
|||
now = now - relativedelta(years=1)
|
||||
|
||||
if not data["times"]:
|
||||
await ctx.send(error("Your split is too large for the time provided, try a smaller split or longer time."))
|
||||
await ctx.send(
|
||||
error("Your split is too large for the time provided, try a smaller split or longer time.")
|
||||
)
|
||||
return
|
||||
|
||||
data["times"].reverse()
|
||||
|
@ -823,6 +827,7 @@ class ActivityLogger(commands.Cog):
|
|||
else:
|
||||
end_time = date
|
||||
|
||||
async with ctx.channel.typing():
|
||||
# get messages split by channel
|
||||
audit_messages = await self.loop.run_in_executor(
|
||||
None,
|
||||
|
@ -883,7 +888,9 @@ class ActivityLogger(commands.Cog):
|
|||
now = now - relativedelta(years=1)
|
||||
|
||||
if not data["times"]:
|
||||
await ctx.send(error("Your split is too large for the time provided, try a smaller split or longer time."))
|
||||
await ctx.send(
|
||||
error("Your split is too large for the time provided, try a smaller split or longer time.")
|
||||
)
|
||||
return
|
||||
|
||||
data["times"].reverse()
|
||||
|
@ -1054,6 +1061,7 @@ class ActivityLogger(commands.Cog):
|
|||
else:
|
||||
end_time = date
|
||||
|
||||
async with ctx.channel.typing():
|
||||
# get messages split by channel
|
||||
messages = await self.loop.run_in_executor(
|
||||
None,
|
||||
|
@ -1113,7 +1121,9 @@ class ActivityLogger(commands.Cog):
|
|||
now = now - relativedelta(years=1)
|
||||
|
||||
if not data["times"]:
|
||||
await ctx.send(error("Your split is too large for the time provided, try a smaller split or longer time."))
|
||||
await ctx.send(
|
||||
error("Your split is too large for the time provided, try a smaller split or longer time.")
|
||||
)
|
||||
return
|
||||
|
||||
data["times"].reverse()
|
||||
|
@ -1246,6 +1256,7 @@ class ActivityLogger(commands.Cog):
|
|||
else:
|
||||
end_time = date
|
||||
|
||||
async with ctx.channel.typing():
|
||||
# get messages split by channel
|
||||
messages = await self.loop.run_in_executor(
|
||||
None,
|
||||
|
@ -1261,7 +1272,11 @@ class ActivityLogger(commands.Cog):
|
|||
def process_messages():
|
||||
for message in messages:
|
||||
# get user id:
|
||||
try:
|
||||
user_id = int(message.split("(id:")[1].split(")")[0].strip())
|
||||
except:
|
||||
continue
|
||||
|
||||
user = self.bot.get_user(user_id)
|
||||
user = user if user is not None else user_id
|
||||
|
||||
|
@ -1378,6 +1393,7 @@ class ActivityLogger(commands.Cog):
|
|||
else:
|
||||
end_time = date
|
||||
|
||||
async with ctx.channel.typing():
|
||||
# get messages split by channel
|
||||
messages = await self.loop.run_in_executor(
|
||||
None,
|
||||
|
@ -1393,7 +1409,10 @@ class ActivityLogger(commands.Cog):
|
|||
def process_messages():
|
||||
for message in messages:
|
||||
# get user id:
|
||||
try:
|
||||
user_id = int(message.split("(id:")[1].split(")")[0].strip())
|
||||
except:
|
||||
continue
|
||||
user = self.bot.get_user(user_id)
|
||||
user = user if user is not None else user_id
|
||||
|
||||
|
@ -1502,6 +1521,7 @@ class ActivityLogger(commands.Cog):
|
|||
else:
|
||||
end_time = date
|
||||
|
||||
async with ctx.channel.typing():
|
||||
# get messages split by channel
|
||||
messages = await self.loop.run_in_executor(
|
||||
None,
|
||||
|
@ -1632,6 +1652,7 @@ class ActivityLogger(commands.Cog):
|
|||
else:
|
||||
end_time = date
|
||||
|
||||
async with ctx.channel.typing():
|
||||
# get messages split by channel
|
||||
messages = await self.loop.run_in_executor(
|
||||
None,
|
||||
|
@ -1776,6 +1797,7 @@ class ActivityLogger(commands.Cog):
|
|||
log_files = glob.glob(os.path.join(PATH, str(guild.id), "*.log"))
|
||||
log_files = [log for log in log_files if "guild" not in log]
|
||||
|
||||
async with ctx.channel.typing():
|
||||
# get messages split by channel
|
||||
messages = await self.loop.run_in_executor(
|
||||
None,
|
||||
|
@ -1828,7 +1850,7 @@ class ActivityLogger(commands.Cog):
|
|||
|
||||
# drop users who do not correlate to anyone else
|
||||
for column in adj_matrix.columns:
|
||||
if adj_matrix.loc[member.name, column] == 0 and column != member.name:
|
||||
if (adj_matrix.loc[member.name, column] == 0).all() and column != member.name:
|
||||
adj_matrix = adj_matrix.drop(columns=column)
|
||||
adj_matrix = adj_matrix.drop(index=column)
|
||||
|
||||
|
|
|
@ -165,7 +165,7 @@ class ThreadRotate(commands.Cog):
|
|||
await ctx.tick()
|
||||
|
||||
@thread_rotate.command(name="topics")
|
||||
async def thread_rotate_topics(self, ctx, channel: discord.TextChannel, *, topics: str = None):
|
||||
async def thread_rotate_topics(self, ctx, channel: discord.TextChannel):
|
||||
"""
|
||||
Modify topics for thread rotation.
|
||||
|
||||
|
@ -176,16 +176,34 @@ class ThreadRotate(commands.Cog):
|
|||
await ctx.send(error("That channel has not been setup for thread rotation!"), delete_after=30)
|
||||
return
|
||||
|
||||
if topics is None:
|
||||
await ctx.send(info(f"{channel.mention}'s topics:"))
|
||||
topic_msg = "Topics:\n"
|
||||
for topic, weight in current.items():
|
||||
topic_msg += f"{topic}: {weight}\n"
|
||||
await ctx.send(box(topic_msg), delete_after=300)
|
||||
|
||||
return
|
||||
await ctx.send(
|
||||
info(
|
||||
"Please list the thread topics and their selection weights.\nThe weight is how likely the topic will be choosen.\nA weight of `1` means it will not be choosen more or less than other topics.\nA weight between 0 and 1 means it is that weight times less likely to be choosen, with a weight of 0 meaning it will never be choosen.\nA weight greater than 1 means it will be that times more likely to be choosen.\n\nFor example, a weight of 1.5 means that topic is 1.5 more likely to be choose over the others. A weight of 0.5 means that topic is half as likely to be choosen over others.\n\nPlease use this format for listing the weights:\n"
|
||||
),
|
||||
delete_after=300,
|
||||
)
|
||||
msg = await ctx.send(
|
||||
box("topic name: weight_value\ntopic 2 name: weight_value\ntopic 3 name: weight_value")
|
||||
+ "\n\nYou can send as many messages as needed, when you are done, type `done`."
|
||||
)
|
||||
|
||||
topics = topics.split("\n")
|
||||
topic_msg = ""
|
||||
while msg.content.lower() != "done":
|
||||
pred = MessagePredicate.same_context(ctx)
|
||||
try:
|
||||
msg = await self.bot.wait_for("message", check=pred, timeout=301)
|
||||
except asyncio.TimeoutError:
|
||||
await ctx.send(error("Took too long, cancelling setup!"), delete_after=30)
|
||||
return
|
||||
topic_msg += msg.content + "\n"
|
||||
|
||||
topics = topic_msg.strip().split("\n")[:-1] # remove done from end
|
||||
parsed_topics = {}
|
||||
for topic in topics:
|
||||
topic = topic.split(":")
|
||||
|
@ -194,10 +212,13 @@ class ThreadRotate(commands.Cog):
|
|||
parsed_topics[":".join(topic[0:-1])] = float(topic[-1])
|
||||
else:
|
||||
parsed_topics[topic[0]] = float(topic[-1])
|
||||
|
||||
if float(topic[-1]) < 0:
|
||||
raise ValueError()
|
||||
except:
|
||||
await ctx.send(
|
||||
error(
|
||||
"Please make sure to use the correct format, every topic and weight should be split by a `:` and the weight should be a single decimal value."
|
||||
"Please make sure to use the correct format, every topic and weight should be split by a `:` and the weight should be a single decimal value greater than or equal to 0."
|
||||
),
|
||||
delete_after=60,
|
||||
)
|
||||
|
@ -206,6 +227,34 @@ class ThreadRotate(commands.Cog):
|
|||
await self.config.channel(channel).topics.set(parsed_topics)
|
||||
await ctx.tick()
|
||||
|
||||
@thread_rotate.command(name="clear")
|
||||
async def thread_rotate_clear(self, ctx, channel: discord.TextChannel):
|
||||
"""
|
||||
Clear a channel's thread rotation settings
|
||||
"""
|
||||
await ctx.send(
|
||||
warning(f"Are you sure you want to delete all settings for {channel.mention}? This cannot be reversed."),
|
||||
delete_after=31,
|
||||
)
|
||||
pred = MessagePredicate.yes_or_no(ctx)
|
||||
try:
|
||||
await self.bot.wait_for("message", check=pred, timeout=30)
|
||||
except asyncio.TimeoutError:
|
||||
await ctx.send(error("Took too long, cancelling clear!"), delete_after=30)
|
||||
return
|
||||
|
||||
if not pred.result:
|
||||
await ctx.send(info("Cancelling clear."), delete_after=30)
|
||||
return
|
||||
|
||||
await self.config.channel(channel).topics.clear()
|
||||
await self.config.channel(channel).ping_roles.clear()
|
||||
await self.config.channel(channel).rotation_interval.clear()
|
||||
await self.config.channel(channel).rotate_on.clear()
|
||||
await self.config.channel(channel).last_topic.clear()
|
||||
await self.config.channel(channel).topic_threads.clear()
|
||||
await ctx.send(info(f"Settings for {channel.mention} cleared."), delete_after=30)
|
||||
|
||||
@thread_rotate.command(name="setup")
|
||||
async def thread_rotate_setup(self, ctx, channel: discord.TextChannel):
|
||||
"""
|
||||
|
@ -293,20 +342,26 @@ class ThreadRotate(commands.Cog):
|
|||
|
||||
await ctx.send(
|
||||
info(
|
||||
"Final step is to list the thread topics and their selection weights.\nThe weight is how likely the topic will be choosen.\nA weight of `1` means it will not be choosen more or less than other topics.\nA weight between 0 and 1 means it is that weight times less likely to be choosen, with a weight of 0 meaning it will never be choosen.\nA weight greater than 1 means it will be that times more likely to be choosen.\n\nFor example, a weight of 1.5 means that topic is 1.5 more likely to be choose over the others. A weight of 0.5 means that topic is half as likely to be choosen by others.\n\nPlease use this format for listing the weights:\n"
|
||||
"Final step is to list the thread topics and their selection weights.\nThe weight is how likely the topic will be choosen.\nA weight of `1` means it will not be choosen more or less than other topics.\nA weight between 0 and 1 means it is that weight times less likely to be choosen, with a weight of 0 meaning it will never be choosen.\nA weight greater than 1 means it will be that times more likely to be choosen.\n\nFor example, a weight of 1.5 means that topic is 1.5 more likely to be choose over the others. A weight of 0.5 means that topic is half as likely to be choosen over others.\n\nPlease use this format for listing the weights:\n"
|
||||
),
|
||||
delete_after=300,
|
||||
)
|
||||
await ctx.send(box("topic name: weight_value\ntopic 2 name: weight_value\ntopic 3 name: weight_value"))
|
||||
msg = await ctx.send(
|
||||
box("topic name: weight_value\ntopic 2 name: weight_value\ntopic 3 name: weight_value")
|
||||
+ "\n\nYou can send as many messages as needed, when you are done, type `done`."
|
||||
)
|
||||
|
||||
topic_msg = ""
|
||||
while msg.content.lower() != "done":
|
||||
pred = MessagePredicate.same_context(ctx)
|
||||
try:
|
||||
msg = await self.bot.wait_for("message", check=pred, timeout=301)
|
||||
except asyncio.TimeoutError:
|
||||
await ctx.send(error("Took too long, cancelling setup!"), delete_after=30)
|
||||
return
|
||||
topic_msg += msg.content + "\n"
|
||||
|
||||
topics = msg.content.split("\n")
|
||||
topics = topic_msg.strip().split("\n")[:-1] # remove done from end
|
||||
parsed_topics = {}
|
||||
for topic in topics:
|
||||
topic = topic.split(":")
|
||||
|
@ -332,7 +387,8 @@ class ThreadRotate(commands.Cog):
|
|||
topic_msg += f"{topic}: {weight}\n"
|
||||
|
||||
await ctx.send(
|
||||
info(f"Please review the settings for thread rotation on channel {channel.mention}:"), delete_after=300,
|
||||
info(f"Please review the settings for thread rotation on channel {channel.mention}:"),
|
||||
delete_after=300,
|
||||
)
|
||||
await ctx.send(
|
||||
box(
|
||||
|
@ -341,7 +397,8 @@ class ThreadRotate(commands.Cog):
|
|||
delete_after=300,
|
||||
)
|
||||
await ctx.send(
|
||||
box(topic_msg), delete_after=300,
|
||||
box(topic_msg),
|
||||
delete_after=300,
|
||||
)
|
||||
|
||||
await ctx.send("Type yes to confirm the thread rotation, type no to cancel thread rotation setup.")
|
||||
|
@ -368,4 +425,3 @@ class ThreadRotate(commands.Cog):
|
|||
info(f"Thread rotation setup! The first rotation will start at <t:{int(date.timestamp())}>"),
|
||||
delete_after=60,
|
||||
)
|
||||
|
||||
|
|
Loading…
Reference in a new issue