fix black formatting errors for sfx and scheduler

This commit is contained in:
brandons209 2020-08-22 20:29:46 -04:00
parent 349d9436d3
commit e3afe10299
7 changed files with 42 additions and 126 deletions

View file

@ -11,9 +11,7 @@ def can_run_command(command_name: str):
return False
try:
can_run = await command.can_run(
ctx, check_all_parents=True, change_permission_state=False
)
can_run = await command.can_run(ctx, check_all_parents=True, change_permission_state=False)
except commands.CommandError:
can_run = False

View file

@ -49,9 +49,7 @@ class Schedule:
command = None
parser = NoExitParser(description="Scheduler event parsing", add_help=False)
parser.add_argument(
"-q", "--quiet", action="store_true", dest="quiet", default=False
)
parser.add_argument("-q", "--quiet", action="store_true", dest="quiet", default=False)
parser.add_argument("--every", nargs="*", dest="every", default=[])
if not command:
parser.add_argument("command", nargs="*")
@ -84,8 +82,7 @@ class Schedule:
recur = parsed
if recur.total_seconds() < 60:
raise BadArgument(
"You can't schedule something to happen that frequently, "
"I'll get ratelimited."
"You can't schedule something to happen that frequently, " "I'll get ratelimited."
)
if vals["at"]:

View file

@ -30,9 +30,7 @@ def neuter_coroutines(klass):
async def replacement_delete_messages(self, messages):
message_ids = list(
{m.id for m in messages if m.__class__.__name__ != "SchedulerMessage"}
)
message_ids = list({m.id for m in messages if m.__class__.__name__ != "SchedulerMessage"})
if not message_ids:
return
@ -42,9 +40,7 @@ async def replacement_delete_messages(self, messages):
return
if len(message_ids) > 100:
raise discord.ClientException(
"Can only bulk delete messages up to 100 messages"
)
raise discord.ClientException("Can only bulk delete messages up to 100 messages")
await self._state.http.delete_messages(self.id, message_ids)
@ -61,9 +57,7 @@ class SchedulerMessage(discord.Message):
Be careful when using this in other use cases.
"""
def __init__(
self, *, content: str, author: discord.Member, channel: discord.TextChannel
) -> None:
def __init__(self, *, content: str, author: discord.Member, channel: discord.TextChannel) -> None:
# auto current time
self.id = discord.utils.time_snowflake(datetime.utcnow())
# important properties for even being processed
@ -81,9 +75,9 @@ class SchedulerMessage(discord.Message):
# suport for attachments somehow later maybe?
self.attachments: List[discord.Attachment] = []
# mentions
self.mention_everyone = self.channel.permissions_for(
self.author
).mention_everyone and bool(EVERYONE_REGEX.match(self.content))
self.mention_everyone = self.channel.permissions_for(self.author).mention_everyone and bool(
EVERYONE_REGEX.match(self.content)
)
# pylint: disable=E1133
# pylint improperly detects the inherited properties here as not being iterable
# This should be fixed with typehint support added to upstream lib later

View file

@ -100,9 +100,7 @@ class Scheduler(commands.Cog):
# explain: mypy assumes this is always true, but other CCs using this API may not be using mypy.
if not (isinstance(author, discord.Member) and isinstance(channel, discord.TextChannel)): # type: ignore
raise TypeError(
"Must provide guild specific discord.py models for both author and channel"
)
raise TypeError("Must provide guild specific discord.py models for both author and channel")
if recur is not None and recur.total_seconds() < 60:
raise ValueError("Recuring events must be at least a minute apart.")
@ -149,9 +147,7 @@ class Scheduler(commands.Cog):
A string which is needed to unschedule the task
"""
tasks = await self.fetch_task_by_attrs_exact(
extern_cog=calling_cog.qualified_name, uid=uid
)
tasks = await self.fetch_task_by_attrs_exact(extern_cog=calling_cog.qualified_name, uid=uid)
if tasks:
await self._remove_tasks(*tasks)
@ -161,15 +157,11 @@ class Scheduler(commands.Cog):
def __init__(self, bot, *args, **kwargs):
self.bot = bot
self.config = Config.get_conf(
self, identifier=78631113035100160, force_registration=True
)
self.config = Config.get_conf(self, identifier=78631113035100160, force_registration=True)
self.config.register_channel(tasks={}) # Serialized Tasks go in here.
self.log = logging.getLogger("red.sinbadcogs.scheduler")
self.bg_loop_task: Optional[asyncio.Task] = None
self.scheduled: Dict[
str, asyncio.Task
] = {} # Might change this to a list later.
self.scheduled: Dict[str, asyncio.Task] = {} # Might change this to a list later.
self.tasks: List[Task] = []
self._iter_lock = asyncio.Lock()
@ -183,10 +175,7 @@ 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:
@ -218,10 +207,7 @@ class Scheduler(commands.Cog):
chan_dict = await self.config.all_channels()
for channel_id, channel_data in chan_dict.items():
channel = self.bot.get_channel(channel_id)
if (
not channel
or not channel.permissions_for(channel.guild.me).read_messages
):
if not channel or not channel.permissions_for(channel.guild.me).read_messages:
continue
tasks_dict = channel_data.get("tasks", {})
for t in Task.bulk_from_config(bot=self.bot, **tasks_dict):
@ -236,9 +222,7 @@ class Scheduler(commands.Cog):
async def bg_loop(self):
await self.bot.wait_until_ready()
await asyncio.sleep(2)
_guilds = [
g for g in self.bot.guilds if g.large and not (g.chunked or g.unavailable)
]
_guilds = [g for g in self.bot.guilds if g.large and not (g.chunked or g.unavailable)]
await self.bot.request_offline_members(*_guilds)
async with self._iter_lock:
@ -256,11 +240,7 @@ class Scheduler(commands.Cog):
message = await task.get_message(self.bot)
context = await self.bot.get_context(message)
context.assume_yes = True
if (
context.invoked_with
and context.command
and context.command.qualified_name in SUSPICIOUS_COMMANDS
):
if context.invoked_with and context.command and context.command.qualified_name in SUSPICIOUS_COMMANDS:
self.log.warning(
f"Handling scheduled {context.command.qualified_name} "
"if you are using this to avoid an issue with another cog, "
@ -305,9 +285,7 @@ class Scheduler(commands.Cog):
for task in self.tasks:
delay = task.next_call_delay
if delay < 30 and task.uid not in self.scheduled:
self.scheduled[task.uid] = asyncio.create_task(
self.delayed_wrap_and_invoke(task, delay)
)
self.scheduled[task.uid] = asyncio.create_task(self.delayed_wrap_and_invoke(task, delay))
if not task.recur:
to_remove.append(task)
@ -317,9 +295,7 @@ class Scheduler(commands.Cog):
# explain: mypy assumes this is always true, but other CCs using this API may not be using mypy.
if not (isinstance(author, discord.Member) and isinstance(channel, discord.TextChannel)): # type: ignore
raise TypeError(
"Must provide guild specific discord.py models for both author and channel"
)
raise TypeError("Must provide guild specific discord.py models for both author and channel")
async def fetch_task_by_attrs_exact(self, **kwargs) -> List[Task]:
def pred(item):
@ -331,9 +307,7 @@ class Scheduler(commands.Cog):
async with self._iter_lock:
return [t for t in self.tasks if pred(t)]
async def fetch_task_by_attrs_lax(
self, lax: Optional[dict] = None, strict: Optional[dict] = None
) -> List[Task]:
async def fetch_task_by_attrs_lax(self, lax: Optional[dict] = None, strict: Optional[dict] = None) -> List[Task]:
def pred(item):
try:
if strict and not all(getattr(item, k) == v for k, v in strict.items()):
@ -358,9 +332,7 @@ class Scheduler(commands.Cog):
@checks.mod_or_permissions(manage_guild=True)
@commands.guild_only()
@commands.command(usage="<eventname> <command> <args>")
async def schedule(
self, ctx: commands.GuildContext, event_name: NonNumeric, *, schedule: Schedule
):
async def schedule(self, ctx: commands.GuildContext, event_name: NonNumeric, *, schedule: Schedule):
"""
Schedule something
@ -419,16 +391,12 @@ class Scheduler(commands.Cog):
quiet: bool = schedule.quiet
if await self.fetch_task_by_attrs_exact(
author=ctx.author, channel=ctx.channel, nicename=event_name.parsed
):
if await self.fetch_task_by_attrs_exact(author=ctx.author, channel=ctx.channel, nicename=event_name.parsed):
if not quiet:
return await ctx.send("You already have an event by that name here.")
async with self._iter_lock:
async with self.config.channel(ctx.channel).tasks(
acquire_lock=False
) as tsks:
async with self.config.channel(ctx.channel).tasks(acquire_lock=False) as tsks:
tsks.update(t.to_config())
self.tasks.append(t)
@ -460,23 +428,15 @@ 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:
await ctx.send(
f"Hmm, I couldn't find that task. (try `{ctx.clean_prefix}showscheduled`)"
)
await ctx.send(f"Hmm, I couldn't find that task. (try `{ctx.clean_prefix}showscheduled`)")
elif len(tasks) > 1:
self.log.warning(
f"Mutiple tasks where should be unique. Task data: {tasks}"
)
await ctx.send(
"There seems to have been breakage here. "
"Cleaning up and logging incident."
)
self.log.warning(f"Mutiple tasks where should be unique. Task data: {tasks}")
await ctx.send("There seems to have been breakage here. " "Cleaning up and logging incident.")
return
else:
@ -486,9 +446,7 @@ class Scheduler(commands.Cog):
@checks.bot_has_permissions(add_reactions=True, embed_links=True)
@commands.guild_only()
@commands.command()
async def showscheduled(
self, ctx: commands.GuildContext, all_channels: bool = False
):
async def showscheduled(self, ctx: commands.GuildContext, all_channels: bool = False):
"""
Shows your scheduled tasks in this, or all channels.
"""
@ -497,9 +455,7 @@ class Scheduler(commands.Cog):
tasks = await self.fetch_tasks_by_guild(ctx.guild)
tasks = [t for t in tasks if t.author == ctx.author]
else:
tasks = await self.fetch_task_by_attrs_exact(
author=ctx.author, channel=ctx.channel
)
tasks = await self.fetch_task_by_attrs_exact(author=ctx.author, channel=ctx.channel)
if not tasks:
return await ctx.send("No scheduled tasks")
@ -507,10 +463,7 @@ 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()
@ -539,10 +492,7 @@ class Scheduler(commands.Cog):
await message.delete()
count = len(tasks)
embeds = [
t.to_embed(index=i, page_count=count, color=color)
for i, t in enumerate(tasks, 1)
]
embeds = [t.to_embed(index=i, page_count=count, color=color) for i, t in enumerate(tasks, 1)]
controls = DEFAULT_CONTROLS.copy()
page_mapping = {i: t for i, t in enumerate(tasks)}
@ -604,9 +554,7 @@ class Scheduler(commands.Cog):
)
async with self._iter_lock:
async with self.config.channel(ctx.channel).tasks(
acquire_lock=False
) as tsks:
async with self.config.channel(ctx.channel).tasks(acquire_lock=False) as tsks:
tsks.update(t.to_config())
self.tasks.append(t)
@ -672,17 +620,11 @@ class Scheduler(commands.Cog):
tasks = await self.fetch_task_by_attrs_exact(uid=task_id)
if not tasks:
await ctx.send(
f"Hmm, I couldn't find that task. (try `{ctx.clean_prefix}showscheduled`)"
)
await ctx.send(f"Hmm, I couldn't find that task. (try `{ctx.clean_prefix}showscheduled`)")
elif len(tasks) > 1:
self.log.warning(
f"Mutiple tasks where should be unique. Task data: {tasks}"
)
return await ctx.send(
"There seems to have been breakage here. Cleaning up and logging incident."
)
self.log.warning(f"Mutiple tasks where should be unique. Task data: {tasks}")
return await ctx.send("There seems to have been breakage here. Cleaning up and logging incident.")
else:
await self._remove_tasks(*tasks)
@ -772,13 +714,9 @@ class Scheduler(commands.Cog):
)
async with self._iter_lock:
self.scheduled[mute_task.uid] = asyncio.create_task(
self.delayed_wrap_and_invoke(mute_task, 0)
)
self.scheduled[mute_task.uid] = asyncio.create_task(self.delayed_wrap_and_invoke(mute_task, 0))
async with self.config.channel(ctx.channel).tasks(
acquire_lock=False
) as tsks:
async with self.config.channel(ctx.channel).tasks(acquire_lock=False) as tsks:
tsks.update(unmute_task.to_config())
self.tasks.append(unmute_task)
@ -835,12 +773,8 @@ class Scheduler(commands.Cog):
)
async with self._iter_lock:
self.scheduled[mute_task.uid] = asyncio.create_task(
self.delayed_wrap_and_invoke(mute_task, 0)
)
self.scheduled[mute_task.uid] = asyncio.create_task(self.delayed_wrap_and_invoke(mute_task, 0))
async with self.config.channel(ctx.channel).tasks(
acquire_lock=False
) as tsks:
async with self.config.channel(ctx.channel).tasks(acquire_lock=False) as tsks:
tsks.update(unmute_task.to_config())
self.tasks.append(unmute_task)

View file

@ -33,9 +33,7 @@ class Task:
pfx = (await bot.get_prefix(self.channel))[0]
content = f"{pfx}{self.content}"
return SchedulerMessage(
content=content, author=self.author, channel=self.channel
)
return SchedulerMessage(content=content, author=self.author, channel=self.channel)
def to_config(self):
@ -72,12 +70,7 @@ 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

View file

@ -264,7 +264,7 @@ class SFX(commands.Cog):
await ctx.send(error("Please reload the cog after the Audio cog has been loaded!"))
return
inject_path = str(code_path(cog_instance=self) / "injection.py")
inject_path = str(code_path(cog_instance=self) / "injection.txt")
with open(inject_path, "r") as f:
injection = f.read()