mirror of
https://github.com/suyiiyii/nonebot-bison.git
synced 2025-07-13 02:43:06 +08:00
56 lines
1.9 KiB
Python
56 lines
1.9 KiB
Python
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 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':
|
|
return await weibo_user_info(target)
|
|
elif target_type == 'bilibili':
|
|
return await bilibili_user_info(target)
|
|
elif target_type == 'rss':
|
|
return await rss_info(target)
|
|
else:
|
|
return None
|
|
|
|
|
|
scheduler_last_run = defaultdict(lambda: 0)
|
|
async def scheduler(fun, target_type):
|
|
platform_interval = {
|
|
'weibo': 3
|
|
}
|
|
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[:50])
|
|
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())
|