Ready for release?
This commit is contained in:
parent
e1d314cc83
commit
607b7b6718
54
fifo/fifo.py
54
fifo/fifo.py
@ -93,6 +93,13 @@ class FIFO(commands.Cog):
|
||||
|
||||
return new_ctx.valid
|
||||
|
||||
async def _delete_task(self, task: Task):
|
||||
job: Union[Job, None] = await self._get_job(task)
|
||||
if job is not None:
|
||||
job.remove()
|
||||
|
||||
await task.delete_self()
|
||||
|
||||
async def _process_task(self, task: Task):
|
||||
job: Union[Job, None] = await self._get_job(task)
|
||||
if job is not None:
|
||||
@ -146,9 +153,14 @@ class FIFO(commands.Cog):
|
||||
pass
|
||||
|
||||
@fifo.command(name="set")
|
||||
async def fifo_setauthor(self, ctx: commands.Context, task_name: str, author_or_channel: Union[discord.Member, discord.TextChannel]):
|
||||
async def fifo_set(
|
||||
self,
|
||||
ctx: commands.Context,
|
||||
task_name: str,
|
||||
author_or_channel: Union[discord.Member, discord.TextChannel],
|
||||
):
|
||||
"""
|
||||
Sets the task to be executed as a different author or in a different channel.
|
||||
Sets a different author or in a different channel for execution of a task.
|
||||
"""
|
||||
task = Task(task_name, ctx.guild.id, self.config, bot=self.bot)
|
||||
await task.load_from_config()
|
||||
@ -327,9 +339,39 @@ class FIFO(commands.Cog):
|
||||
"""
|
||||
Deletes a task from this guild's task list
|
||||
"""
|
||||
pass
|
||||
task = Task(task_name, ctx.guild.id, self.config, bot=self.bot)
|
||||
await task.load_from_config()
|
||||
|
||||
@fifo.group(name="trigger")
|
||||
if task.data is None:
|
||||
await ctx.maybe_send_embed(
|
||||
f"Task by the name of {task_name} is not found in this guild"
|
||||
)
|
||||
return
|
||||
|
||||
await self._delete_task(task)
|
||||
await ctx.maybe_send_embed(f"Task[{task_name}] has been deleted from this guild")
|
||||
|
||||
@fifo.command(name="cleartriggers", aliases=["cleartrigger"])
|
||||
async def fifo_cleartriggers(self, ctx: commands.Context, task_name: str):
|
||||
"""
|
||||
Removes all triggers from specified task
|
||||
|
||||
Useful to start over with new trigger
|
||||
"""
|
||||
|
||||
task = Task(task_name, ctx.guild.id, self.config, bot=self.bot)
|
||||
await task.load_from_config()
|
||||
|
||||
if task.data is None:
|
||||
await ctx.maybe_send_embed(
|
||||
f"Task by the name of {task_name} is not found in this guild"
|
||||
)
|
||||
return
|
||||
|
||||
await task.clear_triggers()
|
||||
await ctx.tick()
|
||||
|
||||
@fifo.group(name="addtrigger", aliases=["trigger"])
|
||||
async def fifo_trigger(self, ctx: commands.Context):
|
||||
"""
|
||||
Add a new trigger for a task from the current guild.
|
||||
@ -405,7 +447,9 @@ class FIFO(commands.Cog):
|
||||
self, ctx: commands.Context, task_name: str, *, cron_str: CronConverter
|
||||
):
|
||||
"""
|
||||
Add a "time of day" trigger to the specified task
|
||||
Add a cron "time of day" trigger to the specified task
|
||||
|
||||
See https://crontab.guru/ for help generating the cron_str
|
||||
"""
|
||||
task = Task(task_name, ctx.guild.id, self.config)
|
||||
await task.load_from_config()
|
||||
|
@ -1,44 +0,0 @@
|
||||
import six
|
||||
from apscheduler.job import Job
|
||||
from apscheduler.schedulers.asyncio import AsyncIOScheduler
|
||||
from apscheduler.schedulers.base import STATE_STOPPED
|
||||
from apscheduler.util import undefined
|
||||
|
||||
|
||||
class RedJob(Job):
|
||||
pass
|
||||
|
||||
|
||||
class RedAsyncIOScheduler(AsyncIOScheduler):
|
||||
|
||||
def add_job(self, func, trigger=None, args=None, kwargs=None, id=None, name=None,
|
||||
misfire_grace_time=undefined, coalesce=undefined, max_instances=undefined,
|
||||
next_run_time=undefined, jobstore='default', executor='default',
|
||||
replace_existing=False, **trigger_args):
|
||||
job_kwargs = {
|
||||
'trigger': self._create_trigger(trigger, trigger_args),
|
||||
'executor': executor,
|
||||
'func': func,
|
||||
'args': tuple(args) if args is not None else (),
|
||||
'kwargs': dict(kwargs) if kwargs is not None else {},
|
||||
'id': id,
|
||||
'name': name,
|
||||
'misfire_grace_time': misfire_grace_time,
|
||||
'coalesce': coalesce,
|
||||
'max_instances': max_instances,
|
||||
'next_run_time': next_run_time
|
||||
}
|
||||
job_kwargs = dict((key, value) for key, value in six.iteritems(job_kwargs) if
|
||||
value is not undefined)
|
||||
job = RedJob(self, **job_kwargs)
|
||||
|
||||
# Don't really add jobs to job stores before the scheduler is up and running
|
||||
with self._jobstores_lock:
|
||||
if self.state == STATE_STOPPED:
|
||||
self._pending_jobs.append((job, jobstore, replace_existing))
|
||||
self._logger.info('Adding job tentatively -- it will be properly scheduled when '
|
||||
'the scheduler starts')
|
||||
else:
|
||||
self._real_add_job(job, jobstore, replace_existing)
|
||||
|
||||
return job
|
20
fifo/task.py
20
fifo/task.py
@ -117,7 +117,9 @@ class Task:
|
||||
continue
|
||||
|
||||
if t["type"] == "cron": # TODO: Implement this, should be easy
|
||||
raise NotImplemented
|
||||
triggers.append(t) # already a string, nothing to do
|
||||
|
||||
continue
|
||||
raise NotImplemented
|
||||
|
||||
return triggers
|
||||
@ -137,7 +139,7 @@ class Task:
|
||||
continue
|
||||
|
||||
if t["type"] == "cron":
|
||||
raise NotImplemented
|
||||
continue # already a string
|
||||
raise NotImplemented
|
||||
|
||||
# async def load_from_data(self, data: Dict):
|
||||
@ -266,7 +268,9 @@ class Task:
|
||||
new_ctx: commands.Context = await self.bot.get_context(message)
|
||||
new_ctx.assume_yes = True
|
||||
if not new_ctx.valid:
|
||||
log.warning(f"Could not execute task due invalid context: {new_ctx}")
|
||||
log.warning(
|
||||
f"Could not execute Task[{self.name}] due invalid context: {new_ctx.invoked_with}"
|
||||
)
|
||||
return False
|
||||
|
||||
await self.bot.invoke(new_ctx)
|
||||
@ -284,7 +288,7 @@ class Task:
|
||||
async def set_channel(self, channel: Union[discord.TextChannel, str]):
|
||||
self.channel_id = getattr(channel, "id", None) or channel
|
||||
await self.config.guild_from_id(self.guild_id).tasks.set_raw(
|
||||
self.name, "channel_id", value=self.author_id
|
||||
self.name, "channel_id", value=self.channel_id
|
||||
)
|
||||
|
||||
def get_command_str(self):
|
||||
@ -323,3 +327,11 @@ class Task:
|
||||
"config": self.config,
|
||||
"bot": self.bot,
|
||||
}
|
||||
|
||||
async def clear_triggers(self):
|
||||
self.data["triggers"] = []
|
||||
await self.save_data()
|
||||
|
||||
async def delete_self(self):
|
||||
"""Hopefully nothing uses the object after running this..."""
|
||||
await self.config.guild_from_id(self.guild_id).tasks.clear_raw(self.name)
|
||||
|
Loading…
x
Reference in New Issue
Block a user