Add APScheduler as builtin scheduler

This commit is contained in:
Richard Chien 2018-08-26 10:05:42 +08:00
parent 2884a58a52
commit 01d6a8cb3c
5 changed files with 41 additions and 1 deletions

View File

@ -4,7 +4,18 @@ import none
from demo import config from demo import config
none.init(config) none.init(config)
app = none.get_bot().asgi
@none.scheduler.scheduled_job('interval', seconds=3)
async def cb():
bot_ = none.get_bot()
try:
await bot_.send_private_msg(self_id=3281334718,
user_id=1002647525,
message='')
except Exception as e:
none.logger.exception(e)
if __name__ == '__main__': if __name__ == '__main__':
none.load_builtin_plugins() none.load_builtin_plugins()

View File

@ -9,6 +9,12 @@ from aiocqhttp import CQHttp
from aiocqhttp.message import Message from aiocqhttp.message import Message
from .log import logger from .log import logger
from .scheduler import Scheduler
if Scheduler:
scheduler = Scheduler()
else:
scheduler = None
class NoneBot(CQHttp): class NoneBot(CQHttp):
@ -40,6 +46,9 @@ class NoneBot(CQHttp):
async def _(ctx): async def _(ctx):
asyncio.ensure_future(handle_notice_or_request(self, ctx)) asyncio.ensure_future(handle_notice_or_request(self, ctx))
if scheduler:
scheduler.configure(self.config.APSCHEDULER_CONFIG)
def run(self, host: str = None, port: int = None, *args, **kwargs): def run(self, host: str = None, port: int = None, *args, **kwargs):
host = host or self.config.HOST host = host or self.config.HOST
port = port or self.config.PORT port = port or self.config.PORT
@ -88,6 +97,8 @@ def get_bot() -> NoneBot:
def run(host: str = None, port: int = None, *args, **kwargs) -> None: def run(host: str = None, port: int = None, *args, **kwargs) -> None:
"""Run the NoneBot instance.""" """Run the NoneBot instance."""
if scheduler and not scheduler.running:
scheduler.start()
get_bot().run(host=host, port=port, *args, **kwargs) get_bot().run(host=host, port=port, *args, **kwargs)

View File

@ -30,3 +30,7 @@ COMMAND_SEP = {'/', '.'}
SESSION_EXPIRE_TIMEOUT = timedelta(minutes=5) SESSION_EXPIRE_TIMEOUT = timedelta(minutes=5)
SESSION_RUNNING_EXPRESSION = '您有命令正在执行,请稍后再试' SESSION_RUNNING_EXPRESSION = '您有命令正在执行,请稍后再试'
SHORT_MESSAGE_MAX_LENGTH = 50 SHORT_MESSAGE_MAX_LENGTH = 50
APSCHEDULER_CONFIG = {
'apscheduler.timezone': 'Asia/Shanghai'
}

11
none/scheduler.py Normal file
View File

@ -0,0 +1,11 @@
try:
from apscheduler.schedulers.asyncio import AsyncIOScheduler
except ImportError:
# APScheduler is not installed
AsyncIOScheduler = None
if AsyncIOScheduler:
class Scheduler(AsyncIOScheduler):
pass
else:
Scheduler = None

View File

@ -15,6 +15,9 @@ setup(
long_description=long_description, long_description=long_description,
long_description_content_type='text/markdown', long_description_content_type='text/markdown',
install_requires=['aiocqhttp>=0.6', 'aiocache>=0.10'], install_requires=['aiocqhttp>=0.6', 'aiocache>=0.10'],
extras_require={
'Scheduler': ['apscheduler>=1.2'],
},
python_requires='>=3.6', python_requires='>=3.6',
platforms='any', platforms='any',
classifiers=( classifiers=(