mirror of
https://github.com/suyiiyii/nonebot-bison.git
synced 2025-07-17 14:43:00 +08:00
optimise code
This commit is contained in:
parent
5a33d3740d
commit
3adb928948
@ -10,25 +10,20 @@ from .config import Config, NoSuchSubscribeException
|
|||||||
from .utils import parse_text
|
from .utils import parse_text
|
||||||
from .send import send_msgs
|
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(), permission=GROUP_ADMIN | GROUP_OWNER, priority=5)
|
||||||
# add_sub = on_command("添加订阅", rule=to_me() & check_is_owner_or_admin, priority=5)
|
|
||||||
@add_sub.handle()
|
@add_sub.handle()
|
||||||
async def _(bot: Bot, event: Event, state: T_State):
|
async def _(bot: Bot, event: Event, state: T_State):
|
||||||
args = str(event.get_message()).strip().split()
|
args = str(event.get_message()).strip().split()
|
||||||
if len(args) != 2:
|
if len(args) != 2:
|
||||||
await add_sub.reject("使用方法为: 添加订阅 平台 id")
|
await add_sub.finish("使用方法为: 添加订阅 平台 id")
|
||||||
return
|
return
|
||||||
target_type, target = args
|
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: Config = Config()
|
||||||
config.add_subscribe(event.group_id, "group", target, name, target_type)
|
config.add_subscribe(event.group_id, "group", target, name, target_type)
|
||||||
await add_sub.finish("成功添加 {}".format(name))
|
await add_sub.finish("成功添加 {}".format(name))
|
||||||
else:
|
else:
|
||||||
await add_sub.reject("平台或者id不存在")
|
await add_sub.finish("平台或者id不存在")
|
||||||
|
|
||||||
query_sub = on_command("查询订阅", rule=to_me(), priority=5)
|
query_sub = on_command("查询订阅", rule=to_me(), priority=5)
|
||||||
@query_sub.handle()
|
@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):
|
async def _(bot: Bot, event: Event, state: T_State):
|
||||||
args = str(event.get_message()).strip().split()
|
args = str(event.get_message()).strip().split()
|
||||||
if len(args) != 2:
|
if len(args) != 2:
|
||||||
await del_sub.reject("使用方法为: 删除订阅 平台 id")
|
await del_sub.finish("使用方法为: 删除订阅 平台 id")
|
||||||
return
|
return
|
||||||
target_type, target = args
|
target_type, target = args
|
||||||
config = Config()
|
config = Config()
|
||||||
try:
|
try:
|
||||||
config.del_subscribe(event.group_id, "group", target, target_type)
|
config.del_subscribe(event.group_id, "group", target, target_type)
|
||||||
except NoSuchSubscribeException:
|
except NoSuchSubscribeException:
|
||||||
await del_sub.reject('平台或id不存在')
|
await del_sub.finish('平台或id不存在')
|
||||||
await del_sub.finish('删除成功')
|
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 time
|
||||||
import asyncio
|
import asyncio
|
||||||
|
import nonebot
|
||||||
|
from nonebot import logger
|
||||||
from collections import defaultdict
|
from collections import defaultdict
|
||||||
from .weibo import Weibo, get_user_info as weibo_user_info
|
from .weibo import Weibo, get_user_info as weibo_user_info
|
||||||
from .bilibili import get_user_info as bilibili_user_info
|
from .bilibili import Bilibili, get_user_info as bilibili_user_info
|
||||||
from .rss import get_rss_info as rss_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):
|
async def check_sub_target(target_type, target):
|
||||||
if target_type == 'weibo':
|
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]:
|
if (wait_time := time.time() - scheduler_last_run[target_type]) < platform_interval[target_type]:
|
||||||
await asyncio.sleep(wait_time)
|
await asyncio.sleep(wait_time)
|
||||||
await fun()
|
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 require
|
||||||
from nonebot import logger
|
from .send import do_send_msgs
|
||||||
from .platform.bilibili import Bilibili
|
from .platform.utils import fetch_and_send
|
||||||
from .platform.weibo import Weibo
|
|
||||||
from .platform.rss import Rss
|
|
||||||
from .post import Post
|
|
||||||
from .send import send_msgs, do_send_msgs
|
|
||||||
from apscheduler.schedulers.asyncio import AsyncIOScheduler
|
from apscheduler.schedulers.asyncio import AsyncIOScheduler
|
||||||
|
|
||||||
scheduler: AsyncIOScheduler = require('nonebot_plugin_apscheduler').scheduler
|
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)
|
@scheduler.scheduled_job('interval', seconds=10)
|
||||||
async def weibo_check():
|
async def weibo_check():
|
||||||
target = config.get_next_target('weibo')
|
await fetch_and_send('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())
|
|
||||||
|
|
||||||
@scheduler.scheduled_job('interval', seconds=10)
|
@scheduler.scheduled_job('interval', seconds=10)
|
||||||
async def bilibili_check():
|
async def bilibili_check():
|
||||||
target = config.get_next_target('bilibili')
|
await fetch_and_send('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())
|
|
||||||
|
|
||||||
@scheduler.scheduled_job('interval', seconds=30)
|
@scheduler.scheduled_job('interval', seconds=30)
|
||||||
async def rss_check():
|
async def rss_check():
|
||||||
target = config.get_next_target('rss')
|
await fetch_and_send('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())
|
|
||||||
|
|
||||||
@scheduler.scheduled_job('interval', seconds=1)
|
@scheduler.scheduled_job('interval', seconds=1)
|
||||||
async def _():
|
async def _():
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
from nonebot.adapters.cqhttp import Bot
|
from nonebot.adapters.cqhttp import Bot
|
||||||
import nonebot
|
import nonebot
|
||||||
|
from nonebot import logger
|
||||||
import time
|
import time
|
||||||
import asyncio
|
import asyncio
|
||||||
|
|
||||||
@ -12,15 +13,21 @@ async def do_send_msgs():
|
|||||||
if time.time() - LAST_SEND_TIME < 1.4:
|
if time.time() - LAST_SEND_TIME < 1.4:
|
||||||
return
|
return
|
||||||
if QUEUE:
|
if QUEUE:
|
||||||
bot, user, user_type, msg = QUEUE.pop(0)
|
bot, user, user_type, msg, retry_time = QUEUE.pop(0)
|
||||||
if user_type == 'group':
|
try:
|
||||||
await bot.call_api('send_group_msg', group_id=user, message=msg)
|
if user_type == 'group':
|
||||||
elif user_type == 'private':
|
await bot.call_api('send_group_msg', group_id=user, message=msg)
|
||||||
await bot.call_api('send_private_msg', user_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()
|
LAST_SEND_TIME = time.time()
|
||||||
|
|
||||||
def send_msgs(bot, user, user_type, msgs):
|
def send_msgs(bot, user, user_type, msgs):
|
||||||
for msg in 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:
|
else:
|
||||||
return text
|
return text
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user