mirror of
https://github.com/brandons209/Red-bot-Cogs.git
synced 2024-05-15 09:54:13 +12:00
Merge branch 'v3' of https://github.com/brandons209/Red-Bot-Cogs into v3
This commit is contained in:
commit
9146ce4efa
|
@ -27,7 +27,10 @@ class RecentActivityRecord:
|
|||
return len(self.activities) + len(self.messages)
|
||||
|
||||
def _filter(
|
||||
self, *, after: Optional[datetime] = None, message_check: Optional[MessagePredicate] = None,
|
||||
self,
|
||||
*,
|
||||
after: Optional[datetime] = None,
|
||||
message_check: Optional[MessagePredicate] = None,
|
||||
) -> List[Union[datetime, discord.Message]]:
|
||||
|
||||
ret: List[Union[datetime, discord.Message]] = []
|
||||
|
@ -49,7 +52,10 @@ class RecentActivityRecord:
|
|||
return ret
|
||||
|
||||
def conditional_count(
|
||||
self, *, after: Optional[datetime] = None, message_check: Optional[MessagePredicate] = None,
|
||||
self,
|
||||
*,
|
||||
after: Optional[datetime] = None,
|
||||
message_check: Optional[MessagePredicate] = None,
|
||||
) -> int:
|
||||
|
||||
ret = len(self._filter(after=after, message_check=message_check))
|
||||
|
@ -57,7 +63,10 @@ class RecentActivityRecord:
|
|||
return ret
|
||||
|
||||
def conditional_remove(
|
||||
self, *, before: Optional[datetime] = None, message_check: Optional[MessagePredicate] = None,
|
||||
self,
|
||||
*,
|
||||
before: Optional[datetime] = None,
|
||||
message_check: Optional[MessagePredicate] = None,
|
||||
):
|
||||
if before:
|
||||
self.activities = [a for a in self.activities if a > before]
|
||||
|
@ -100,7 +109,11 @@ class RecordHandler:
|
|||
self.records[guild][member].add_message(message)
|
||||
|
||||
def get_active_for_guild(
|
||||
self, *, guild: discord.Guild, after: datetime, message_check: Optional[MessagePredicate] = None,
|
||||
self,
|
||||
*,
|
||||
guild: discord.Guild,
|
||||
after: datetime,
|
||||
message_check: Optional[MessagePredicate] = None,
|
||||
) -> Iterator[discord.Member]:
|
||||
|
||||
with contextlib.suppress(KeyError):
|
||||
|
|
|
@ -587,7 +587,12 @@ class MoreAdmin(commands.Cog):
|
|||
@checks.admin_or_permissions(administrator=True)
|
||||
@checks.bot_has_permissions(kick_members=True)
|
||||
async def purge(
|
||||
self, ctx, role: discord.Role, check_messages: bool = True, *, threshold: str = None,
|
||||
self,
|
||||
ctx,
|
||||
role: discord.Role,
|
||||
check_messages: bool = True,
|
||||
*,
|
||||
threshold: str = None,
|
||||
):
|
||||
"""
|
||||
Purge inactive users with role.
|
||||
|
@ -834,7 +839,7 @@ class MoreAdmin(commands.Cog):
|
|||
Sends a message to a channel from Aurelia.
|
||||
"""
|
||||
try:
|
||||
await channel.send(msg)#, allowed_mentions=discord.AllowedMentions())
|
||||
await channel.send(msg) # , allowed_mentions=discord.AllowedMentions())
|
||||
except:
|
||||
await ctx.send("Could not send message in that channel.")
|
||||
|
||||
|
|
|
@ -98,7 +98,9 @@ class PersonalRoles(commands.Cog):
|
|||
dic = {
|
||||
_("User"): ctx.guild.get_member(member) or f"[X] {member}",
|
||||
_("Role"): shorten(
|
||||
str(ctx.guild.get_role(data["role"]) or "[X] {}".format(data["role"])), 32, placeholder="…",
|
||||
str(ctx.guild.get_role(data["role"]) or "[X] {}".format(data["role"])),
|
||||
32,
|
||||
placeholder="…",
|
||||
),
|
||||
}
|
||||
assigned_roles.append(dic)
|
||||
|
|
|
@ -50,7 +50,11 @@ MAX_EMBED = 25
|
|||
|
||||
|
||||
class RoleManagement(
|
||||
UtilMixin, MassManagementMixin, EventMixin, commands.Cog, metaclass=CompositeMetaClass,
|
||||
UtilMixin,
|
||||
MassManagementMixin,
|
||||
EventMixin,
|
||||
commands.Cog,
|
||||
metaclass=CompositeMetaClass,
|
||||
):
|
||||
"""
|
||||
Cog for role management
|
||||
|
@ -308,7 +312,12 @@ class RoleManagement(
|
|||
@checks.admin_or_permissions(manage_guild=True)
|
||||
@commands.command(name="rolebind")
|
||||
async def bind_role_to_reactions(
|
||||
self, ctx: GuildContext, role: discord.Role, channel: discord.TextChannel, msgid: int, emoji: str,
|
||||
self,
|
||||
ctx: GuildContext,
|
||||
role: discord.Role,
|
||||
channel: discord.TextChannel,
|
||||
msgid: int,
|
||||
emoji: str,
|
||||
):
|
||||
"""
|
||||
Binds a role to a reaction on a message...
|
||||
|
@ -347,7 +356,11 @@ class RoleManagement(
|
|||
|
||||
cfg = self.config.custom("REACTROLE", str(message.id), eid)
|
||||
await cfg.set(
|
||||
{"roleid": role.id, "channelid": message.channel.id, "guildid": role.guild.id,}
|
||||
{
|
||||
"roleid": role.id,
|
||||
"channelid": message.channel.id,
|
||||
"guildid": role.guild.id,
|
||||
}
|
||||
)
|
||||
await ctx.send(
|
||||
f"Remember, the reactions only function according to "
|
||||
|
@ -1035,7 +1048,11 @@ class RoleManagement(
|
|||
|
||||
channel_id = data.get("channelid", None)
|
||||
if channel_id:
|
||||
link = linkfmt.format(guild_id=role.guild.id, channel_id=channel_id, message_id=message_id,)
|
||||
link = linkfmt.format(
|
||||
guild_id=role.guild.id,
|
||||
channel_id=channel_id,
|
||||
message_id=message_id,
|
||||
)
|
||||
else:
|
||||
link = (
|
||||
f"unknown message with id {message_id}" f" (use `roleset fixup` to find missing data for this)"
|
||||
|
|
|
@ -124,7 +124,11 @@ class MassManagementMixin(MixinMeta):
|
|||
|
||||
@mrole.command(name="user")
|
||||
async def mrole_user(
|
||||
self, ctx: GuildContext, users: commands.Greedy[discord.Member], *, _query: RoleSyntaxConverter,
|
||||
self,
|
||||
ctx: GuildContext,
|
||||
users: commands.Greedy[discord.Member],
|
||||
*,
|
||||
_query: RoleSyntaxConverter,
|
||||
) -> None:
|
||||
"""
|
||||
adds/removes roles to one or more users
|
||||
|
@ -245,7 +249,8 @@ class MassManagementMixin(MixinMeta):
|
|||
filename += f"-part{part}"
|
||||
filename += ".csv"
|
||||
await ctx.send(
|
||||
content=f"Data for {ctx.author.mention}", files=[discord.File(data, filename=filename)],
|
||||
content=f"Data for {ctx.author.mention}",
|
||||
files=[discord.File(data, filename=filename)],
|
||||
)
|
||||
csvf.close()
|
||||
data.close()
|
||||
|
@ -299,11 +304,17 @@ class MassManagementMixin(MixinMeta):
|
|||
await self.update_roles_atomically(who=member, give=query["add"], remove=query["remove"])
|
||||
except RoleManagementException:
|
||||
log.debug(
|
||||
"Internal filter failure on member id %d guild id %d query %s", member.id, ctx.guild.id, query,
|
||||
"Internal filter failure on member id %d guild id %d query %s",
|
||||
member.id,
|
||||
ctx.guild.id,
|
||||
query,
|
||||
)
|
||||
except discord.HTTPException:
|
||||
log.debug(
|
||||
"Unpredicted failure for member id %d in guild id %d query %s", member.id, ctx.guild.id, query,
|
||||
"Unpredicted failure for member id %d in guild id %d query %s",
|
||||
member.id,
|
||||
ctx.guild.id,
|
||||
query,
|
||||
)
|
||||
|
||||
await ctx.tick()
|
||||
|
|
|
@ -79,7 +79,11 @@ class UtilMixin(MixinMeta):
|
|||
return variation_stripper_re.sub("", s)
|
||||
|
||||
async def update_roles_atomically(
|
||||
self, *, who: discord.Member, give: List[discord.Role] = None, remove: List[discord.Role] = None,
|
||||
self,
|
||||
*,
|
||||
who: discord.Member,
|
||||
give: List[discord.Role] = None,
|
||||
remove: List[discord.Role] = None,
|
||||
):
|
||||
"""
|
||||
Give and remove roles as a single op with some slight sanity
|
||||
|
|
|
@ -86,7 +86,8 @@ class SchedulerMessage(discord.Message):
|
|||
)
|
||||
self.channel_mentions: List[discord.TextChannel] = list(
|
||||
filter(
|
||||
None, [self.guild.get_channel(idx) for idx in self.raw_channel_mentions], # type: ignore
|
||||
None,
|
||||
[self.guild.get_channel(idx) for idx in self.raw_channel_mentions], # type: ignore
|
||||
)
|
||||
)
|
||||
self.role_mentions: List[discord.Role] = list(
|
||||
|
|
|
@ -175,7 +175,10 @@ class Scheduler(commands.Cog):
|
|||
task.cancel()
|
||||
|
||||
async def red_delete_data_for_user(
|
||||
self, *, requester: Literal["discord_deleted_user", "owner", "user", "user_strict"], user_id: int,
|
||||
self,
|
||||
*,
|
||||
requester: Literal["discord_deleted_user", "owner", "user", "user_strict"],
|
||||
user_id: int,
|
||||
):
|
||||
loaded_tasks = await self.fetch_task_by_attrs_exact(author=user_id)
|
||||
if loaded_tasks:
|
||||
|
@ -428,7 +431,8 @@ class Scheduler(commands.Cog):
|
|||
"""
|
||||
|
||||
tasks = await self.fetch_task_by_attrs_lax(
|
||||
lax={"uid": info, "nicename": info}, strict={"author": ctx.author, "channel": ctx.channel},
|
||||
lax={"uid": info, "nicename": info},
|
||||
strict={"author": ctx.author, "channel": ctx.channel},
|
||||
)
|
||||
|
||||
if not tasks:
|
||||
|
@ -463,7 +467,10 @@ class Scheduler(commands.Cog):
|
|||
await self.task_menu(ctx, tasks)
|
||||
|
||||
async def task_menu(
|
||||
self, ctx: commands.GuildContext, tasks: List[Task], message: Optional[discord.Message] = None,
|
||||
self,
|
||||
ctx: commands.GuildContext,
|
||||
tasks: List[Task],
|
||||
message: Optional[discord.Message] = None,
|
||||
):
|
||||
|
||||
color = await ctx.embed_color()
|
||||
|
|
|
@ -70,7 +70,12 @@ class Task:
|
|||
|
||||
with contextlib.suppress(AttributeError, ValueError):
|
||||
yield cls(
|
||||
initial=initial, recur=recur, channel=channel, author=author, uid=uid, **data,
|
||||
initial=initial,
|
||||
recur=recur,
|
||||
channel=channel,
|
||||
author=author,
|
||||
uid=uid,
|
||||
**data,
|
||||
)
|
||||
|
||||
@property
|
||||
|
|
Loading…
Reference in a new issue