mirror of
https://github.com/suyiiyii/nonebot-bison.git
synced 2025-07-16 05:13:00 +08:00
optimise code
This commit is contained in:
parent
5a33d3740d
commit
3adb928948
src/plugins/hk_reporter
@ -10,25 +10,20 @@ from .config import Config, NoSuchSubscribeException
|
||||
from .utils import parse_text
|
||||
from .send import send_msgs
|
||||
|
||||
async def check_is_owner_or_admin(bot: Bot, event: Event):
|
||||
return await (GROUP_ADMIN | GROUP_OWNER)(bot, event)
|
||||
|
||||
# add_sub = on_command("添加订阅", rule=to_me(), permission=Permission(check_is_owner_or_admin), priority=5)
|
||||
add_sub = on_command("添加订阅", rule=to_me(), permission=GROUP_ADMIN | GROUP_OWNER, priority=5)
|
||||
# add_sub = on_command("添加订阅", rule=to_me() & check_is_owner_or_admin, priority=5)
|
||||
@add_sub.handle()
|
||||
async def _(bot: Bot, event: Event, state: T_State):
|
||||
args = str(event.get_message()).strip().split()
|
||||
if len(args) != 2:
|
||||
await add_sub.reject("使用方法为: 添加订阅 平台 id")
|
||||
await add_sub.finish("使用方法为: 添加订阅 平台 id")
|
||||
return
|
||||
target_type, target = args
|
||||
if (name := await check_sub_target(target_type, target)):
|
||||
if name := await check_sub_target(target_type, target):
|
||||
config: Config = Config()
|
||||
config.add_subscribe(event.group_id, "group", target, name, target_type)
|
||||
await add_sub.finish("成功添加 {}".format(name))
|
||||
else:
|
||||
await add_sub.reject("平台或者id不存在")
|
||||
await add_sub.finish("平台或者id不存在")
|
||||
|
||||
query_sub = on_command("查询订阅", rule=to_me(), priority=5)
|
||||
@query_sub.handle()
|
||||
@ -46,13 +41,13 @@ del_sub = on_command("删除订阅", rule=to_me(), permission=GROUP_ADMIN | GROU
|
||||
async def _(bot: Bot, event: Event, state: T_State):
|
||||
args = str(event.get_message()).strip().split()
|
||||
if len(args) != 2:
|
||||
await del_sub.reject("使用方法为: 删除订阅 平台 id")
|
||||
await del_sub.finish("使用方法为: 删除订阅 平台 id")
|
||||
return
|
||||
target_type, target = args
|
||||
config = Config()
|
||||
try:
|
||||
config.del_subscribe(event.group_id, "group", target, target_type)
|
||||
except NoSuchSubscribeException:
|
||||
await del_sub.reject('平台或id不存在')
|
||||
await del_sub.finish('平台或id不存在')
|
||||
await del_sub.finish('删除成功')
|
||||
|
||||
|
@ -0,0 +1,4 @@
|
||||
from .bilibili import Bilibili
|
||||
from .rss import Rss
|
||||
from .weibo import Weibo
|
||||
from .utils import check_sub_target
|
@ -1,9 +1,14 @@
|
||||
import time
|
||||
import asyncio
|
||||
import nonebot
|
||||
from nonebot import logger
|
||||
from collections import defaultdict
|
||||
from .weibo import Weibo, get_user_info as weibo_user_info
|
||||
from .bilibili import get_user_info as bilibili_user_info
|
||||
from .rss import get_rss_info as rss_info
|
||||
from .bilibili import Bilibili, get_user_info as bilibili_user_info
|
||||
from .rss import Rss, get_rss_info as rss_info
|
||||
from ..config import Config
|
||||
from ..post import Post
|
||||
from ..send import send_msgs
|
||||
|
||||
async def check_sub_target(target_type, target):
|
||||
if target_type == 'weibo':
|
||||
@ -24,3 +29,27 @@ async def scheduler(fun, target_type):
|
||||
if (wait_time := time.time() - scheduler_last_run[target_type]) < platform_interval[target_type]:
|
||||
await asyncio.sleep(wait_time)
|
||||
await fun()
|
||||
|
||||
async def fetch_and_send(target_type: str):
|
||||
config = Config()
|
||||
platform_manager = {
|
||||
'bilibili': Bilibili(),
|
||||
'weibo': Weibo(),
|
||||
'rss': Rss()
|
||||
}
|
||||
target = config.get_next_target(target_type)
|
||||
if not target:
|
||||
return
|
||||
logger.debug('try to fecth new posts from {}, target: {}'.format(target_type, target))
|
||||
new_posts: list[Post] = await platform_manager[target_type].fetch_new_post(target)
|
||||
send_list = config.target_user_cache[target_type][target]
|
||||
bot_list = list(nonebot.get_bots().values())
|
||||
bot = bot_list[0] if bot_list else None
|
||||
for new_post in new_posts:
|
||||
logger.warning('get new {} dynamic: {}'.format(target_type, new_post.url))
|
||||
logger.warning(new_post)
|
||||
if not bot:
|
||||
logger.warning('no bot connected')
|
||||
else:
|
||||
for to_send in send_list:
|
||||
send_msgs(bot, to_send['user'], to_send['user_type'], await new_post.generate_messages())
|
||||
|
@ -1,75 +1,22 @@
|
||||
import nonebot
|
||||
from .config import Config
|
||||
from nonebot import require
|
||||
from nonebot import logger
|
||||
from .platform.bilibili import Bilibili
|
||||
from .platform.weibo import Weibo
|
||||
from .platform.rss import Rss
|
||||
from .post import Post
|
||||
from .send import send_msgs, do_send_msgs
|
||||
from .send import do_send_msgs
|
||||
from .platform.utils import fetch_and_send
|
||||
from apscheduler.schedulers.asyncio import AsyncIOScheduler
|
||||
|
||||
scheduler: AsyncIOScheduler = require('nonebot_plugin_apscheduler').scheduler
|
||||
config: Config = Config()
|
||||
weibo: Weibo = Weibo()
|
||||
bilibili: Bilibili = Bilibili()
|
||||
rss: Rss = Rss()
|
||||
|
||||
@scheduler.scheduled_job('interval', seconds=10)
|
||||
async def weibo_check():
|
||||
target = config.get_next_target('weibo')
|
||||
if not target:
|
||||
return
|
||||
logger.debug('try to fecth new posts from weibo, target: {}'.format(target))
|
||||
new_weibos: list[Post] = await weibo.fetch_new_post(target)
|
||||
send_list = config.target_user_cache['weibo'][target]
|
||||
bot_list = list(nonebot.get_bots().values())
|
||||
bot = bot_list[0] if bot_list else None
|
||||
for new_weibo in new_weibos:
|
||||
logger.warning('get new weibo post: {}'.format(new_weibo.url))
|
||||
if not bot:
|
||||
logger.warning('no bot connected')
|
||||
else:
|
||||
for to_send in send_list:
|
||||
send_msgs(bot, to_send['user'], to_send['user_type'], await new_weibo.generate_messages())
|
||||
await fetch_and_send('weibo')
|
||||
|
||||
@scheduler.scheduled_job('interval', seconds=10)
|
||||
async def bilibili_check():
|
||||
target = config.get_next_target('bilibili')
|
||||
if not target:
|
||||
return
|
||||
logger.debug('try to fecth new posts from bilibili, target: {}'.format(target))
|
||||
new_posts: list[Post] = await bilibili.fetch_new_post(target)
|
||||
send_list = config.target_user_cache['bilibili'][target]
|
||||
bot_list = list(nonebot.get_bots().values())
|
||||
bot = bot_list[0] if bot_list else None
|
||||
for new_post in new_posts:
|
||||
logger.warning('get new bilibili dynamic: {}'.format(new_post.url))
|
||||
logger.warning(new_post)
|
||||
if not bot:
|
||||
logger.warning('no bot connected')
|
||||
else:
|
||||
for to_send in send_list:
|
||||
send_msgs(bot, to_send['user'], to_send['user_type'], await new_post.generate_messages())
|
||||
await fetch_and_send('bilibili')
|
||||
|
||||
|
||||
@scheduler.scheduled_job('interval', seconds=30)
|
||||
async def rss_check():
|
||||
target = config.get_next_target('rss')
|
||||
if not target:
|
||||
return
|
||||
logger.debug('try to fecth new posts from rss, target: {}'.format(target))
|
||||
new_posts: list[Post] = await rss.fetch_new_post(target)
|
||||
send_list = config.target_user_cache['rss'][target]
|
||||
bot_list = list(nonebot.get_bots().values())
|
||||
bot = bot_list[0] if bot_list else None
|
||||
for new_post in new_posts:
|
||||
logger.warning('get new rss entry: {}'.format(new_post.url))
|
||||
logger.warning(new_post)
|
||||
if not bot:
|
||||
logger.warning('no bot connected')
|
||||
else:
|
||||
for to_send in send_list:
|
||||
send_msgs(bot, to_send['user'], to_send['user_type'], await new_post.generate_messages())
|
||||
await fetch_and_send('rss')
|
||||
|
||||
@scheduler.scheduled_job('interval', seconds=1)
|
||||
async def _():
|
||||
|
@ -1,5 +1,6 @@
|
||||
from nonebot.adapters.cqhttp import Bot
|
||||
import nonebot
|
||||
from nonebot import logger
|
||||
import time
|
||||
import asyncio
|
||||
|
||||
@ -12,15 +13,21 @@ async def do_send_msgs():
|
||||
if time.time() - LAST_SEND_TIME < 1.4:
|
||||
return
|
||||
if QUEUE:
|
||||
bot, user, user_type, msg = QUEUE.pop(0)
|
||||
if user_type == 'group':
|
||||
await bot.call_api('send_group_msg', group_id=user, message=msg)
|
||||
elif user_type == 'private':
|
||||
await bot.call_api('send_private_msg', user_id=user, message=msg)
|
||||
bot, user, user_type, msg, retry_time = QUEUE.pop(0)
|
||||
try:
|
||||
if user_type == 'group':
|
||||
await bot.call_api('send_group_msg', group_id=user, message=msg)
|
||||
elif user_type == 'private':
|
||||
await bot.call_api('send_private_msg', user_id=user, message=msg)
|
||||
except:
|
||||
if retry_time > 0:
|
||||
QUEUE.insert(0, (bot, user, user_type, msg, retry_time - 1))
|
||||
else:
|
||||
logger.warning('send msg err {}'.format(msg))
|
||||
LAST_SEND_TIME = time.time()
|
||||
|
||||
def send_msgs(bot, user, user_type, msgs):
|
||||
for msg in msgs:
|
||||
QUEUE.append((bot, user, user_type, msg))
|
||||
QUEUE.append((bot, user, user_type, msg, 3))
|
||||
|
||||
|
||||
|
@ -58,3 +58,4 @@ async def parse_text(text: str):
|
||||
else:
|
||||
return text
|
||||
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user