Compare commits

...
13 Commits
Author SHA1 Message Date
HibiKier 109b80b6ef Update data_source.py 2021-08-11 11:44:39 +08:00
hibiki 218147b771 fix rule 2021-08-11 11:16:58 +08:00
HibiKier eec810dc6a Update config.py 2021-08-11 11:09:02 +08:00
HibiKier c2e2dc5609 Update README.md 2021-08-11 11:06:53 +08:00
hibiki 8f46cffa44 fix rule 2021-08-11 11:06:17 +08:00
HibiKier db54df6ce5 Update README.md 2021-08-11 10:43:44 +08:00
hibiki e68b154ddc fix yiqing 2021-08-11 10:41:40 +08:00
hibiki 5ec89e7538 fix 2021-08-10 23:03:46 +08:00
HibiKier 96dc1d9851 Update data_source.py 2021-08-09 07:50:33 +08:00
HibiKier 7148940a2f Update data_source.py 2021-08-09 07:50:04 +08:00
HibiKier 0455cba221 Update README.md 2021-08-07 22:36:54 +08:00
HibiKier b5f1d1ac21 Update README.md 2021-08-06 23:02:43 +08:00
HibiKier a628f7ab26 Update data_source.py 2021-08-06 21:27:55 +08:00
22 changed files with 460 additions and 197 deletions
+18 -3
View File
@@ -41,10 +41,10 @@
- [x] 构造假消息(自定义的分享链接) - [x] 构造假消息(自定义的分享链接)
- [x] 商店/我的金币/购买道具/使用道具 - [x] 商店/我的金币/购买道具/使用道具
- [x] 8种手游抽卡 (查看 [nonebot_plugin_gamedraw](https://github.com/HibiKier/nonebot_plugin_gamedraw)) - [x] 8种手游抽卡 (查看 [nonebot_plugin_gamedraw](https://github.com/HibiKier/nonebot_plugin_gamedraw))
- [x] 我有一个朋友想问问..(pcrbot插件..彻底重写) - [x] 我有一个朋友想问问..(借鉴pcrbot插件)
- [x] 原神黄历 (使用[Genshin_Impact_bot](https://github.com/H-K-Y/Genshin_Impact_bot)插件) - [x] 原神黄历 (使用[Genshin_Impact_bot](https://github.com/H-K-Y/Genshin_Impact_bot)插件)
- [x] 原神今日素材 (原[Genshin_Impact_bot](https://github.com/H-K-Y/Genshin_Impact_bot)插件,彻底重写,实现方法改为网页截图) - [x] 原神今日素材
- [x] 原神资源查询 (使用[Genshin_Impact_bot](https://github.com/H-K-Y/Genshin_Impact_bot)插件,资源下载优化为异步下载) - [x] 原神资源查询 (借鉴[Genshin_Impact_bot](https://github.com/H-K-Y/Genshin_Impact_bot)插件)
- [x] 金币红包 - [x] 金币红包
- [x] pil对图片的一些操作 - [x] pil对图片的一些操作
@@ -653,11 +653,26 @@ python bot.py
## 更新 ## 更新
### 2021/8/10
* 重复的好友请求和邀群提示在5分钟内不会重复提示
* 疫情会优先检查城市,城市省份市区重名时请添加‘市’
* 添加命令‘原神资源查找’,‘设置cookie’
* 添加配置AUTO_UPDATE_ZHENXUN,是否自动更新真寻,默认True
* 添加配置MAX_RUSSIAN_BET_GOLD,俄罗斯轮盘赌注最大金额,默认1000
* 检查更新真寻定时任务时间改为12 : 00
* 添加功能能不能好好说话(nbnhhsh)
* 添加功能随机roll,无参为数字,有参为随机参数
* 添加linux重启脚本以及重启命令‘重启’(建议首次生成restart.sh先查看命令是否正确)
* 修复管理员功能的权限检测
### 2021/8/6 ### 2021/8/6
* 天气查询会优先遍历城市 * 天气查询会优先遍历城市
* 添加自动更新真寻命令 * 添加自动更新真寻命令
##### 如果你的版本为 2021/8/4,可以直接复制plugins/check_zhenxun_update后,通过指令来更新真寻
### 2021/8/4 ### 2021/8/4
* 修改天气与疫情城市数据,改为api获取,丰富疫情的回复消息 * 修改天气与疫情城市数据,改为api获取,丰富疫情的回复消息
+1
View File
@@ -14,6 +14,7 @@ nonebot.load_plugins("plugins/shop")
nonebot.load_plugins("plugins/genshin") nonebot.load_plugins("plugins/genshin")
nonebot.load_plugins("plugins/alapi") nonebot.load_plugins("plugins/alapi")
nonebot.load_plugins("plugins/pix_gallery") nonebot.load_plugins("plugins/pix_gallery")
nonebot.load_plugins("plugins/admin_bot_manage")
if __name__ == "__main__": if __name__ == "__main__":
+20 -14
View File
@@ -67,6 +67,7 @@ SEMAPHORE = 5 # 限制碧蓝航线和FGO并发数
ADMIN_DEFAULT_AUTH: int = 5 # 默认群管理员权限 ADMIN_DEFAULT_AUTH: int = 5 # 默认群管理员权限
MAX_SIGN_GOLD: int = 200 # 签到好感度加成额外获得的最大金币数 MAX_SIGN_GOLD: int = 200 # 签到好感度加成额外获得的最大金币数
MAX_RUSSIAN_BET_GOLD: int = 1000 # 俄罗斯轮盘最大赌注金额
INITIAL_SETU_PROBABILITY: float = 0.7 # 色图概率 INITIAL_SETU_PROBABILITY: float = 0.7 # 色图概率
FUDU_PROBABILITY: float = 0.7 # 复读概率 FUDU_PROBABILITY: float = 0.7 # 复读概率
@@ -97,7 +98,7 @@ HIBIAPI_BOOKMARKS: int = 5000
# 需要为哪些群更新最新版gocq吗?(上传最新版gocq) # 需要为哪些群更新最新版gocq吗?(上传最新版gocq)
# 示例:[434995955, 239483248] # 示例:[434995955, 239483248]
UPDATE_GOCQ_GROUP: List[int] = [774261838] UPDATE_GOCQ_GROUP: List[int] = []
# 是否存储色图 # 是否存储色图
DOWNLOAD_SETU: bool = True DOWNLOAD_SETU: bool = True
@@ -109,10 +110,15 @@ AUTO_ADD_FRIEND: bool = True
ALAPI_AI_CHECK: bool = True ALAPI_AI_CHECK: bool = True
# 导入商店自带的三个商品 # 导入商店自带的三个商品
IMPORT_DEFAULT_SHOP_GOODS: bool = True IMPORT_DEFAULT_SHOP_GOODS: bool = True
# 真寻是否自动更新
AUTO_UPDATE_ZHENXUN: bool = True
# 群管理员功能 与 对应权限 # 群管理员功能 与 对应权限
admin_plugins_auth = { admin_plugins_auth = {
"admin_bot_manage": OC_LEVEL, "custom_welcome_message": OC_LEVEL,
"group_notification_state": OC_LEVEL,
"switch_rule": OC_LEVEL,
"update_group_member_info": OC_LEVEL,
"ban": BAN_LEVEL, "ban": BAN_LEVEL,
"delete_img": DELETE_IMG_LEVEL, "delete_img": DELETE_IMG_LEVEL,
"move_img": MOVE_IMG_LEVEL, "move_img": MOVE_IMG_LEVEL,
@@ -198,15 +204,15 @@ HIBIAPI = HIBIAPI[:-1] if HIBIAPI[-1] == "/" else HIBIAPI
RSSHUBAPP = RSSHUBAPP[:-1] if RSSHUBAPP[-1] == "/" else RSSHUBAPP RSSHUBAPP = RSSHUBAPP[:-1] if RSSHUBAPP[-1] == "/" else RSSHUBAPP
# 配置文件应用 # 配置文件应用
if USE_CONFIG_FILE: # if USE_CONFIG_FILE:
config = get_config_data() # config = get_config_data()
if config: # if config:
for key in config.keys(): # for key in config.keys():
if isinstance(config[key], str): # if isinstance(config[key], str):
config[key] = config[key].strip() # config[key] = config[key].strip()
if key.find("proxy") != -1: # if key.find("proxy") != -1:
if not config[key]: # if not config[key]:
config[key] = None # config[key] = None
# if not configs[key] and key.find("PATH") == -1: # # if not configs[key] and key.find("PATH") == -1:
# configs[key] = None # # configs[key] = None
globals().update(config) # globals().update(config)
-11
View File
@@ -1,11 +0,0 @@
from nonebot.plugin import export
from .data_source import update_member_info
from .custom_welcome_message import *
from .group_notification_state import *
from .switch_rule import *
from .update_group_member_info import *
from .timing_task import *
export = export()
export.update_member_info = update_member_info
@@ -1,6 +1,6 @@
from nonebot import on_command from nonebot import on_command, export
from nonebot.typing import T_State from nonebot.typing import T_State
from nonebot.adapters.cqhttp import Bot, GroupMessageEvent from nonebot.adapters.cqhttp import Bot, GroupMessageEvent, GROUP
from .data_source import update_member_info from .data_source import update_member_info
__plugin_name__ = "更新群组成员列表" __plugin_name__ = "更新群组成员列表"
@@ -12,7 +12,8 @@ __plugin_usage__ = """
更新群组成员列表 更新群组成员列表
""" """
from nonebot.adapters.cqhttp.permission import GROUP export = export()
export.update_member_info = update_member_info
refresh_member_group = on_command( refresh_member_group = on_command(
"更新群组成员列表", aliases={"更新群组成员信息"}, permission=GROUP, priority=5, block=True "更新群组成员列表", aliases={"更新群组成员信息"}, permission=GROUP, priority=5, block=True
+43 -36
View File
@@ -5,33 +5,36 @@ from datetime import datetime
from configs.config import AUTO_ADD_FRIEND from configs.config import AUTO_ADD_FRIEND
from nonebot.adapters.cqhttp.exception import ActionFailed from nonebot.adapters.cqhttp.exception import ActionFailed
from utils.utils import scheduler from utils.utils import scheduler
import time
__plugin_name__ = "好友群聊处理请求 [Hidden]" __plugin_name__ = "好友群聊处理请求 [Hidden]"
friend_req = on_request(priority=5) friend_req = on_request(priority=5)
exists_list = [] exists_data = {"private": {}, "group": {}}
@friend_req.handle() @friend_req.handle()
async def _(bot: Bot, event: FriendRequestEvent, state: dict): async def _(bot: Bot, event: FriendRequestEvent, state: dict):
global exists_list global exists_data
if f"{event.user_id}" not in exists_list: if exists_data["private"].get(event.user_id):
exists_list.append(f"{event.user_id}") if time.time() - exists_data["private"][event.user_id] < 60 * 5:
user = await bot.get_stranger_info(user_id=event.user_id) return
nickname = user["nickname"] exists_data["private"][event.user_id] = time.time()
await bot.send_private_msg( user = await bot.get_stranger_info(user_id=event.user_id)
user_id=int(list(bot.config.superusers)[0]), nickname = user["nickname"]
message=f"*****一份好友申请*****\n" await bot.send_private_msg(
f"昵称:{nickname}({event.user_id})\n" user_id=int(list(bot.config.superusers)[0]),
f"自动同意:{'√' if AUTO_ADD_FRIEND else '×'}\n" message=f"*****一份好友申请*****\n"
f"日期:{str(datetime.now()).split('.')[0]}\n" f"昵称:{nickname}({event.user_id})\n"
f"备注:{event.comment}", f"自动同意:{'√' if AUTO_ADD_FRIEND else '×'}\n"
) f"日期:{str(datetime.now()).split('.')[0]}\n"
if AUTO_ADD_FRIEND: f"备注:{event.comment}",
await bot.set_friend_add_request(flag=event.flag, approve=True) )
await FriendUser.add_friend_info(user["user_id"], user["nickname"]) if AUTO_ADD_FRIEND:
await bot.set_friend_add_request(flag=event.flag, approve=True)
await FriendUser.add_friend_info(user["user_id"], user["nickname"])
group_req = on_request(priority=5, block=True) group_req = on_request(priority=5, block=True)
@@ -39,7 +42,7 @@ group_req = on_request(priority=5, block=True)
@group_req.handle() @group_req.handle()
async def _(bot: Bot, event: GroupRequestEvent, state: dict): async def _(bot: Bot, event: GroupRequestEvent, state: dict):
global exists_list global exists_data
if event.sub_type == "invite": if event.sub_type == "invite":
if str(event.user_id) in bot.config.superusers: if str(event.user_id) in bot.config.superusers:
try: try:
@@ -49,22 +52,26 @@ async def _(bot: Bot, event: GroupRequestEvent, state: dict):
except ActionFailed: except ActionFailed:
pass pass
else: else:
if f"{event.user_id}:{event.group_id}" not in exists_list: if exists_data["group"].get(f"{event.user_id}:{event.group_id}"):
exists_list.append(f"{event.user_id}:{event.group_id}") if (
nickname = await FriendUser.get_user_name(event.user_id) time.time()
await bot.send_private_msg( - exists_data["group"][f"{event.user_id}:{event.group_id}"]
user_id=int(list(bot.config.superusers)[0]), < 60 * 5
message=f"*****一份入群申请*****\n" ):
f"申请人:{nickname}({event.user_id})\n" return
f"群聊:{event.group_id}\n" exists_data["group"][f"{event.user_id}:{event.group_id}"] = time.time()
f"邀请日期:{str(datetime.now()).split('.')[0]}", nickname = await FriendUser.get_user_name(event.user_id)
) await bot.send_private_msg(
await bot.send_private_msg( user_id=int(list(bot.config.superusers)[0]),
user_id=event.user_id, message=f"*****一份入群申请*****\n"
message="想要邀请我偷偷入群嘛~已经提醒真寻的管理员大人了\n" f"申请人:{nickname}({event.user_id})\n"
"请确保已经群主或群管理沟通过!\n" f"群聊:{event.group_id}\n"
"等待管理员处理吧!", f"邀请日期:{str(datetime.now()).split('.')[0]}",
) )
await bot.send_private_msg(
user_id=event.user_id,
message="想要邀请我偷偷入群嘛~已经提醒真寻的管理员大人了\n" "请确保已经群主或群管理沟通过!\n" "等待管理员处理吧!",
)
@scheduler.scheduled_job( @scheduler.scheduled_job(
@@ -72,5 +79,5 @@ async def _(bot: Bot, event: GroupRequestEvent, state: dict):
minutes=5, minutes=5,
) )
async def _(): async def _():
global exists_list global exists_data
exists_list = [] exists_data = {"private": {}, "group": {}}
+14 -9
View File
@@ -33,8 +33,9 @@ ban = on_command(
@ban.handle() @ban.handle()
async def _(bot: Bot, event: GroupMessageEvent, state: T_State): async def _(bot: Bot, event: GroupMessageEvent, state: T_State):
result = "" result = ""
qq = get_message_at(event.json())[0] qq = get_message_at(event.json())
if qq: if qq:
qq = qq[0]
user_name = await bot.get_group_member_info(group_id=event.group_id, user_id=qq) user_name = await bot.get_group_member_info(group_id=event.group_id, user_id=qq)
user_name = user_name['card'] if user_name['card'] else user_name['nickname'] user_name = user_name['card'] if user_name['card'] else user_name['nickname']
msg = get_message_text(event.json()) msg = get_message_text(event.json())
@@ -52,16 +53,16 @@ async def _(bot: Bot, event: GroupMessageEvent, state: T_State):
time = -1 time = -1
if state["_prefix"]["raw_command"] in [".ban", "/ban"]: if state["_prefix"]["raw_command"] in [".ban", "/ban"]:
if ( if (
await LevelUser.get_user_level(event.user_id, event.group_id) await LevelUser.get_user_level(event.user_id, event.group_id)
<= await LevelUser.get_user_level(qq, event.group_id) <= await LevelUser.get_user_level(qq, event.group_id)
and str(event.user_id) not in bot.config.superusers and str(event.user_id) not in bot.config.superusers
): ):
await ban.finish( await ban.finish(
f"您的权限等级比对方低或相等, {list(bot.config.nickname)[0]}不能为您使用此功能!", f"您的权限等级比对方低或相等, {list(bot.config.nickname)[0]}不能为您使用此功能!",
at_sender=True, at_sender=True,
) )
if await BanUser.ban( if await BanUser.ban(
qq, await LevelUser.get_user_level(event.user_id, event.group_id), time qq, await LevelUser.get_user_level(event.user_id, event.group_id), time
): ):
logger.info( logger.info(
f"USER {event.user_id} GROUP {event.group_id} 将 USER {qq} 封禁 时长 {time/60} 分钟" f"USER {event.user_id} GROUP {event.group_id} 将 USER {qq} 封禁 时长 {time/60} 分钟"
@@ -82,10 +83,10 @@ async def _(bot: Bot, event: GroupMessageEvent, state: T_State):
result = f"{user_name} 已在黑名单!预计 {time}后解封" result = f"{user_name} 已在黑名单!预计 {time}后解封"
else: else:
if ( if (
await BanUser.check_ban_level( await BanUser.check_ban_level(
qq, await LevelUser.get_user_level(event.user_id, event.group_id) qq, await LevelUser.get_user_level(event.user_id, event.group_id)
) )
and str(event.user_id) not in bot.config.superusers and str(event.user_id) not in bot.config.superusers
): ):
await ban.finish( await ban.finish(
f"ban掉 {user_name} 的管理员权限比您高,无法进行unban", at_sender=True f"ban掉 {user_name} 的管理员权限比您高,无法进行unban", at_sender=True
@@ -100,3 +101,7 @@ async def _(bot: Bot, event: GroupMessageEvent, state: T_State):
else: else:
await ban.finish("艾特人了吗??", at_sender=True) await ban.finish("艾特人了吗??", at_sender=True)
await ban.finish(result, at_sender=True) await ban.finish(result, at_sender=True)
+59 -27
View File
@@ -6,15 +6,21 @@ from .data_source import check_update, get_latest_version
from services.log import logger from services.log import logger
from utils.utils import scheduler, get_bot from utils.utils import scheduler, get_bot
from pathlib import Path from pathlib import Path
from configs.config import AUTO_UPDATE_ZHENXUN
from nonebot.rule import to_me
import platform
import os
update_zhenxun = on_command('检查更新真寻', permission=SUPERUSER, priority=1, block=True) update_zhenxun = on_command('检查更新真寻', permission=SUPERUSER, priority=1, block=True)
restart = on_command('重启', aliases={'restart'}, permission=SUPERUSER, rule=to_me(), priority=1, block=True)
@update_zhenxun.handle() @update_zhenxun.handle()
async def _(bot: Bot, event: MessageEvent, state: T_State): async def _(bot: Bot, event: MessageEvent, state: T_State):
try: try:
await check_update(bot) code = await check_update(bot)
except Exception as e: except Exception as e:
logger.error(f'更新真寻未知错误 {type(e)}:{e}') logger.error(f'更新真寻未知错误 {type(e)}:{e}')
await bot.send_private_msg( await bot.send_private_msg(
@@ -22,41 +28,67 @@ async def _(bot: Bot, event: MessageEvent, state: T_State):
message=f'更新真寻未知错误 {type(e)}:{e}' message=f'更新真寻未知错误 {type(e)}:{e}'
) )
else: else:
await bot.send_private_msg( if code == 200:
user_id=int(list(bot.config.superusers)[0]), await bot.send_private_msg(
message=f'更新完毕,请重启真寻....' user_id=int(list(bot.config.superusers)[0]),
) message=f'更新完毕,请重启真寻....'
)
@restart.handle()
async def _(bot: Bot, event: MessageEvent, state: T_State):
if str(platform.system()).lower() == 'windows':
await restart.finish('暂无windows重启脚本...')
@restart.got('flag', prompt='确定是否重启真寻?(重启失败咱们将失去联系,请谨慎!)')
async def _(bot: Bot, event: MessageEvent, state: T_State):
flag = state['flag']
if flag.lower() in ['true', '是', '好']:
await restart.send('开始重启真寻..请稍等...')
open('is_restart', 'w')
os.system('./restart.sh')
else:
await restart.send('已取消操作...')
@scheduler.scheduled_job( @scheduler.scheduled_job(
"interval", "cron",
hours=24, hour=12,
minute=0,
) )
async def _(): async def _():
_version = "v0.0.0" if AUTO_UPDATE_ZHENXUN:
_version_file = Path() / "__version__" _version = "v0.0.0"
if _version_file.exists(): _version_file = Path() / "__version__"
_version = ( if _version_file.exists():
open(_version_file, "r", encoding="utf8").readline().split(":")[-1].strip() _version = (
) open(_version_file, "r", encoding="utf8").readline().split(":")[-1].strip()
latest_version, tar_gz_url = await get_latest_version()
if latest_version and tar_gz_url:
if _version != latest_version:
bot = get_bot()
await bot.send_private_msg(
user_id=int(list(bot.config.superusers)[0]),
message=f'检测到真寻版本更新\n'
f'当前版本:{_version},最新版本:{latest_version}\n'
f'尝试自动更新...'
) )
try: latest_version, tar_gz_url = await get_latest_version()
await check_update(bot) if latest_version and tar_gz_url:
except Exception as e: if _version != latest_version:
logger.error(f'更新真寻未知错误 {type(e)}:{e}') bot = get_bot()
await bot.send_private_msg( await bot.send_private_msg(
user_id=int(list(bot.config.superusers)[0]), user_id=int(list(bot.config.superusers)[0]),
message=f'更新真寻未知错误 {type(e)}:{e}\n' message=f'检测到真寻版本更新\n'
f'当前版本:{_version},最新版本:{latest_version}\n'
f'尝试自动更新...'
) )
try:
code = await check_update(bot)
except Exception as e:
logger.error(f'更新真寻未知错误 {type(e)}:{e}')
await bot.send_private_msg(
user_id=int(list(bot.config.superusers)[0]),
message=f'更新真寻未知错误 {type(e)}:{e}\n'
)
else:
if code == 200:
await bot.send_private_msg(
user_id=int(list(bot.config.superusers)[0]),
message=f'更新完毕,请重启真寻....'
)
+83 -43
View File
@@ -1,7 +1,7 @@
from aiohttp.client_exceptions import ClientConnectorError from aiohttp.client_exceptions import ClientConnectorError
from nonebot.adapters.cqhttp import Bot from nonebot.adapters.cqhttp import Bot
from utils.user_agent import get_user_agent from utils.user_agent import get_user_agent
from utils.utils import get_local_proxy from utils.utils import get_local_proxy, get_bot
from typing import List from typing import List
from bs4.element import Tag from bs4.element import Tag
from services.log import logger from services.log import logger
@@ -17,10 +17,11 @@ import tarfile
import shutil import shutil
import os import os
if str(platform.system()).lower() == 'windows': if str(platform.system()).lower() == "windows":
policy = asyncio.WindowsSelectorEventLoopPolicy() policy = asyncio.WindowsSelectorEventLoopPolicy()
asyncio.set_event_loop_policy(policy) asyncio.set_event_loop_policy(policy)
driver = nonebot.get_driver() driver = nonebot.get_driver()
version_url = "https://github.com/HibiKier/zhenxun_bot/releases" version_url = "https://github.com/HibiKier/zhenxun_bot/releases"
@@ -33,7 +34,38 @@ backup_dir = Path() / "backup"
@driver.on_startup @driver.on_startup
async def check_update(bot: Bot): def init():
if str(platform.system()).lower() != "windows":
restart = Path() / "restart.sh"
env_file = Path() / ".env.dev"
if not restart.exists() and env_file.exists():
with open(env_file, "r", encoding="utf8") as ef:
data = ef.readlines()
port = [x.split("=")[1].strip() for x in data if "port" in x.lower()][0]
with open(restart, "w", encoding="utf8") as f:
f.write(
"pid=$(netstat -tunlp | grep " + port + " | awk '{print $7}')\n"
"pid=${pid%/*}\n"
"kill -9 $pid\n"
"sleep 3\n"
"python3 bot.py"
)
os.system("chmod +x ./restart.sh")
logger.info("已自动生成 restart.sh(重启) 文件,请检查是否与本地指令符合...")
@driver.on_bot_connect
async def remind(bot: Bot):
is_restart_file = Path() / 'is_restart'
if is_restart_file.exists():
await bot.send_private_msg(
user_id=int(list(bot.config.superusers)[0]),
message=f"真寻重启完毕...",
)
is_restart_file.unlink()
async def check_update(bot: Bot) -> int:
logger.info("开始检查更新真寻酱....") logger.info("开始检查更新真寻酱....")
_version = "v0.0.0" _version = "v0.0.0"
if _version_file.exists(): if _version_file.exists():
@@ -46,43 +78,51 @@ async def check_update(bot: Bot):
logger.info(f"检测真寻已更新,当前版本:{_version},最新版本:{latest_version}") logger.info(f"检测真寻已更新,当前版本:{_version},最新版本:{latest_version}")
await bot.send_private_msg( await bot.send_private_msg(
user_id=int(list(bot.config.superusers)[0]), user_id=int(list(bot.config.superusers)[0]),
message=f"检测真寻已更新,当前版本:{_version},最新版本:{latest_version}\n" message=f"检测真寻已更新,当前版本:{_version},最新版本:{latest_version}\n" f"开始更新.....",
f"开始更新.....") )
logger.info(f"开始下载真寻最新版文件....") logger.info(f"开始下载真寻最新版文件....")
if await download_latest_file(tar_gz_url): if await download_latest_file(tar_gz_url):
logger.info("下载真寻最新版文件完成....") logger.info("下载真寻最新版文件完成....")
await asyncio.get_event_loop().run_in_executor(None, _file_handle, latest_version) await asyncio.get_event_loop().run_in_executor(
None, _file_handle, latest_version
)
logger.info("真寻更新完毕,清理文件完成....") logger.info("真寻更新完毕,清理文件完成....")
logger.info('开始获取真寻更新日志.....') logger.info("开始获取真寻更新日志.....")
update_info = await get_updated_info() update_info = await get_updated_info()
if update_info: if update_info:
logger.info('获取真寻更新日志成功...开始发送日志...') logger.info("获取真寻更新日志成功...开始发送日志...")
await bot.send_private_msg( await bot.send_private_msg(
user_id=int(list(bot.config.superusers)[0]), user_id=int(list(bot.config.superusers)[0]),
message=f'真寻更新完成,版本:{_version} -> {latest_version}\n' message=f"真寻更新完成,版本:{_version} -> {latest_version}\n"
f'更新日志:\n' f"更新日志:\n"
f'{update_info}') f"{update_info}",
)
else: else:
logger.warning('获取真寻更新日志失败...') logger.warning("获取真寻更新日志失败...")
await bot.send_private_msg( await bot.send_private_msg(
user_id=int(list(bot.config.superusers)[0]), user_id=int(list(bot.config.superusers)[0]),
message=f'真寻更新完成,版本:{_version} -> {latest_version}\n' message=f"真寻更新完成,版本:{_version} -> {latest_version}\n"
f'获取真寻更新日志失败...') f"获取真寻更新日志失败...",
)
return 200
else: else:
logger.warning(f'下载真寻最新版本失败...版本号:{latest_version}') logger.warning(f"下载真寻最新版本失败...版本号:{latest_version}")
await bot.send_private_msg( await bot.send_private_msg(
user_id=int(list(bot.config.superusers)[0]), user_id=int(list(bot.config.superusers)[0]),
message=f'下载真寻最新版本失败...版本号:{latest_version}.') message=f"下载真寻最新版本失败...版本号:{latest_version}.",
)
else: else:
logger.info(f"自动获取真寻版本成功:{latest_version},当前版本为最新版,无需更新...") logger.info(f"自动获取真寻版本成功:{latest_version},当前版本为最新版,无需更新...")
await bot.send_private_msg( await bot.send_private_msg(
user_id=int(list(bot.config.superusers)[0]), user_id=int(list(bot.config.superusers)[0]),
message=f'自动获取真寻版本成功:{latest_version},当前版本为最新版,无需更新...') message=f"自动获取真寻版本成功:{latest_version},当前版本为最新版,无需更新...",
)
else: else:
logger.warning("自动获取真寻版本失败....") logger.warning("自动获取真寻版本失败....")
await bot.send_private_msg( await bot.send_private_msg(
user_id=int(list(bot.config.superusers)[0]), user_id=int(list(bot.config.superusers)[0]), message=f"自动获取真寻版本失败...."
message=f'自动获取真寻版本失败....') )
return 999
def _file_handle(latest_version: str): def _file_handle(latest_version: str):
@@ -101,8 +141,8 @@ def _file_handle(latest_version: str):
update_file = update_info["update_file"] update_file = update_info["update_file"]
add_file = update_info["add_file"] add_file = update_info["add_file"]
delete_file = update_info["delete_file"] delete_file = update_info["delete_file"]
config_file = Path() / 'configs' / 'config.py' config_file = Path() / "configs" / "config.py"
config_path_file = Path() / 'configs' / 'config_path.py' config_path_file = Path() / "configs" / "config_path.py"
for file in delete_file + update_file: for file in delete_file + update_file:
file = Path() / file file = Path() / file
backup_file = Path(backup_dir) / file backup_file = Path(backup_dir) / file
@@ -113,9 +153,9 @@ def _file_handle(latest_version: str):
if file not in [config_file, config_path_file]: if file not in [config_file, config_path_file]:
os.rename(file.absolute(), backup_file.absolute()) os.rename(file.absolute(), backup_file.absolute())
else: else:
with open(file, 'r', encoding='utf8') as rf: with open(file, "r", encoding="utf8") as rf:
data = rf.read() data = rf.read()
with open(backup_file, 'w', encoding='utf8') as wf: with open(backup_file, "w", encoding="utf8") as wf:
wf.write(data) wf.write(data)
logger.info(f"已备份文件:{file}") logger.info(f"已备份文件:{file}")
for file in add_file + update_file: for file in add_file + update_file:
@@ -131,7 +171,7 @@ def _file_handle(latest_version: str):
old_lines = open(old_file, "r", encoding="utf8").readlines() old_lines = open(old_file, "r", encoding="utf8").readlines()
for nl in new_lines: for nl in new_lines:
tmp += check_old_lines(old_lines, nl) tmp += check_old_lines(old_lines, nl)
with open(file, 'w', encoding='utf8') as f: with open(file, "w", encoding="utf8") as f:
f.write(tmp) f.write(tmp)
if tf: if tf:
tf.close() tf.close()
@@ -159,8 +199,8 @@ async def get_latest_version() -> "str, str":
div.find( div.find(
"div", {"class": "f1 flex-auto min-width-0 text-normal"} "div", {"class": "f1 flex-auto min-width-0 text-normal"}
) )
.find("a") .find("a")
.text .text
) )
tar_gz_url = div.find_all( tar_gz_url = div.find_all(
"a", {"class": "d-flex flex-items-center"} "a", {"class": "d-flex flex-items-center"}
@@ -179,9 +219,7 @@ async def download_latest_file(url_: str) -> bool:
try: try:
async with session.get(url_, proxy=get_local_proxy()) as res: async with session.get(url_, proxy=get_local_proxy()) as res:
if res.status == 200: if res.status == 200:
async with aiofiles.open( async with aiofiles.open(zhenxun_latest_tar_gz, "wb") as f:
zhenxun_latest_tar_gz, "wb"
) as f:
await f.write(await res.read()) await f.write(await res.read())
return True return True
except (TimeoutError, ClientConnectorError): except (TimeoutError, ClientConnectorError):
@@ -205,24 +243,26 @@ async def get_updated_info() -> str:
for _ in range(3): for _ in range(3):
try: try:
async with session.get(main_url, proxy=get_local_proxy()) as res: async with session.get(main_url, proxy=get_local_proxy()) as res:
soup = BeautifulSoup(await res.text(), 'lxml') soup = BeautifulSoup(await res.text(), "lxml")
children_list = list(soup.find('article').children) children_list = list(soup.find("article").children)
children_list = [x for x in children_list if x != '\n'] children_list = [x for x in children_list if x != "\n"]
for i, children in enumerate(children_list): for i, children in enumerate(children_list):
a = children.find('a') a = children.find("a")
if a and isinstance(a, Tag) and a.get('href') == '#更新': if a and isinstance(a, Tag) and a.get("href") == "#更新":
update_info = '' update_info = ""
tmp_children_list = children_list[i:] tmp_children_list = children_list[i:]
tmp_children_list = [x for x in tmp_children_list if 'ul' in str(x)] tmp_children_list = [
x for x in tmp_children_list if "ul" in str(x)
]
for j, chi in enumerate(tmp_children_list): for j, chi in enumerate(tmp_children_list):
if 'ul' in str(chi): if "ul" in str(chi):
update_time = children_list[i:][j+1].text update_time = children_list[i:][j + 1].text
update_info += f'更新日期:{update_time}\n' update_info += f"更新日期:{update_time}\n"
ul = children_list[i:][j+2] ul = children_list[i:][j + 2]
break break
for li in ul.find_all('li'): for li in ul.find_all("li"):
update_info += f'\t● {li.text}\n' update_info += f"\t● {li.text}\n"
return update_info return update_info
except (TimeoutError, ClientConnectorError): except (TimeoutError, ClientConnectorError):
pass pass
return '' return ""
+1 -1
View File
@@ -27,7 +27,7 @@ async def _(bot: Bot, event: MessageEvent, state: T_State):
if time.strftime("%w") == "0": if time.strftime("%w") == "0":
await material.send("今天是周日,所有材料副本都开放了。") await material.send("今天是周日,所有材料副本都开放了。")
return return
await material.send(Message(image('daily_material.png', 'genshin/material') + '\n※ 黄历数据来源于 genshin.pub')) await material.send(Message(image('daily_material.png', 'genshin/material') + '\n※ 每日素材数据来源于 genshin.pub'))
logger.info( logger.info(
f"(USER {event.user_id}, GROUP {event.group_id if event.message_type != 'private' else 'private'})" f"(USER {event.user_id}, GROUP {event.group_id if event.message_type != 'private' else 'private'})"
f" 发送查看今日素材") f" 发送查看今日素材")
+74 -34
View File
@@ -146,41 +146,81 @@ class Map:
# 生成最优路线(说是最优其实就是直线最短) # 生成最优路线(说是最优其实就是直线最短)
def _generate_best_route(self): def _generate_best_route(self):
resources_route = [] line_points = []
# 先连上最近的资源路径
for res in self.resource_point:
# 拿到最近的资源
current_res, _ = res.get_resource_distance(
self.resource_point
+ self.teleport_anchor_point
+ self.teleport_god_point
)
self.map.line(
(current_res.x, current_res.y, res.x, res.y), (255, 0, 0), width=1
)
resources_route.append((current_res, res))
teleport_list = self.teleport_anchor_point + self.teleport_god_point teleport_list = self.teleport_anchor_point + self.teleport_god_point
for res1, res2 in resources_route: for teleport in teleport_list:
point_list = [x for x in resources_route if res1 in x or res2 in x] current_res, res_min_distance = teleport.get_resource_distance(self.resource_point)
if not list(set(point_list).intersection(set(teleport_list))): current_teleport, teleport_min_distance = current_res.get_resource_distance(teleport_list)
if res1 not in teleport_list and res2 not in teleport_list: if current_teleport == teleport:
# while True: self.map.line(
# tmp = [x for x in point_list] (current_teleport.x, current_teleport.y, current_res.x, current_res.y), (255, 0, 0), width=1
# break )
teleport1, distance1 = res1.get_resource_distance(teleport_list) is_used_res_points = []
teleport2, distance2 = res2.get_resource_distance(teleport_list) for res in self.resource_point:
if distance1 > distance2: if res in is_used_res_points:
self.map.line( continue
(teleport1.x, teleport1.y, res1.x, res1.y), current_teleport, teleport_min_distance = res.get_resource_distance(teleport_list)
(255, 0, 0), current_res, res_min_distance = res.get_resource_distance(self.resource_point)
width=1, if teleport_min_distance < res_min_distance:
) self.map.line(
else: (current_teleport.x, current_teleport.y, res.x, res.y), (255, 0, 0), width=1
self.map.line( )
(teleport2.x, teleport2.y, res2.x, res2.y), else:
(255, 0, 0), is_used_res_points.append(current_res)
width=1, self.map.line(
) (current_res.x, current_res.y, res.x, res.y), (255, 0, 0), width=1
)
res_cp = self.resource_point[:]
res_cp.remove(current_res)
# for _ in res_cp:
current_teleport_, teleport_min_distance = res.get_resource_distance(teleport_list)
current_res, res_min_distance = res.get_resource_distance(res_cp)
if teleport_min_distance < res_min_distance:
self.map.line(
(current_teleport.x, current_teleport.y, res.x, res.y), (255, 0, 0), width=1
)
else:
self.map.line(
(current_res.x, current_res.y, res.x, res.y), (255, 0, 0), width=1
)
is_used_res_points.append(current_res)
is_used_res_points.append(res)
# resources_route = []
# # 先连上最近的资源路径
# for res in self.resource_point:
# # 拿到最近的资源
# current_res, _ = res.get_resource_distance(
# self.resource_point
# + self.teleport_anchor_point
# + self.teleport_god_point
# )
# self.map.line(
# (current_res.x, current_res.y, res.x, res.y), (255, 0, 0), width=1
# )
# resources_route.append((current_res, res))
# teleport_list = self.teleport_anchor_point + self.teleport_god_point
# for res1, res2 in resources_route:
# point_list = [x for x in resources_route if res1 in x or res2 in x]
# if not list(set(point_list).intersection(set(teleport_list))):
# if res1 not in teleport_list and res2 not in teleport_list:
# # while True:
# # tmp = [x for x in point_list]
# # break
# teleport1, distance1 = res1.get_resource_distance(teleport_list)
# teleport2, distance2 = res2.get_resource_distance(teleport_list)
# if distance1 > distance2:
# self.map.line(
# (teleport1.x, teleport1.y, res1.x, res1.y),
# (255, 0, 0),
# width=1,
# )
# else:
# self.map.line(
# (teleport2.x, teleport2.y, res2.x, res2.y),
# (255, 0, 0),
# width=1,
# )
# self.map.line(xy, (255, 0, 0), width=3) # self.map.line(xy, (255, 0, 0), width=3)
+2
View File
@@ -50,6 +50,8 @@ entertainment_help = {
"poetry": "突然文艺的真寻是否搞错了什么 --> 指令:念诗/来首诗/念首诗", "poetry": "突然文艺的真寻是否搞错了什么 --> 指令:念诗/来首诗/念首诗",
"comments_163": "生了个人,我很抱歉 --> 指令:到点了/12点了/网易云热评/网易云评论", "comments_163": "生了个人,我很抱歉 --> 指令:到点了/12点了/网易云热评/网易云评论",
"pix_gallery": "偶尔也想看看美图? --> 指令:PIX [关键词/uid/pid:pid] [num]/查看pix图库 [关键词]/显示pix关键词", "pix_gallery": "偶尔也想看看美图? --> 指令:PIX [关键词/uid/pid:pid] [num]/查看pix图库 [关键词]/显示pix关键词",
'nbnhhsh': "会说话就多说点! --> 指令:nbnhhsh/能不能好好说话 [文本](空格划分)",
"roll": "让真寻来帮你决定吧! --> 指令:roll/ roll [文本](空格划分)"
} }
# 其他 # 其他
other_help = [ other_help = [
+49
View File
@@ -0,0 +1,49 @@
from nonebot import on_command
from nonebot.typing import T_State
from nonebot.adapters.cqhttp import Bot, MessageEvent, GroupMessageEvent
from utils.utils import get_message_text
from services.log import logger
import ujson as json
import aiohttp
__plugin_name__ = "能不能好好说话"
__plugin_usage__ = "用法:\n nbnhhsh [文本]"
HHSH_GUESS_URL = "https://lab.magiconch.com/api/nbnhhsh/guess"
nbnhhsh = on_command("nbnhhsh", aliases={"能不能好好说话"}, priority=5, block=True)
@nbnhhsh.handle()
async def _(bot: Bot, event: MessageEvent, state: T_State):
msg = get_message_text(event.json())
async with aiohttp.ClientSession(
headers={"content-type": "application/json"}
) as session:
async with session.post(
HHSH_GUESS_URL, data=json.dumps({"text": msg}), timeout=5
) as response:
if response.status == 200:
try:
data = await response.json()
tmp = ""
rst = ""
for x in data:
trans = ""
if x.get("trans"):
trans = x["trans"][0]
elif x.get("inputting"):
trans = ",".join(x["inputting"])
tmp += f'{x["name"]} -> {trans}\n'
rst += trans
logger.info(
f"(USER {event.user_id}, GROUP "
f"{event.group_id if isinstance(event, GroupMessageEvent) else 'private'})"
f" 发送能不能好好说话: {msg} -> {rst}"
)
await nbnhhsh.send(f"{tmp}={rst}", at_sender=True)
except (IndexError, KeyError):
await nbnhhsh.finish("没有找到对应的翻译....")
else:
await nbnhhsh.finish("网络访问失败了....")
+49
View File
@@ -0,0 +1,49 @@
from nonebot import on_command
from nonebot.typing import T_State
from nonebot.adapters.cqhttp import Bot, MessageEvent, GroupMessageEvent
from utils.utils import get_message_text
from services.log import logger
import random
import asyncio
__plugin_name__ = "roll"
__plugin_usage__ = (
"用法:\n" "\troll -> 随机数字\n" "\troll *[文本] -> 决定事件\n" "示例:roll 吃饭 睡觉 打游戏"
)
roll = on_command("roll", priority=5, block=True)
@roll.handle()
async def _(bot: Bot, event: MessageEvent, state: T_State):
msg = get_message_text(event.json()).split()
if not msg:
await roll.finish(f"roll: {random.randint(0, 100)}", at_sender=True)
user_name = event.sender.card if event.sender.card else event.sender.nickname
await roll.send(
random.choice(
[
"转动命运的齿轮,拨开眼前迷雾...",
f"启动吧,命运的水晶球,为{user_name}指引方向!",
"嗯哼,在此刻转动吧!命运!",
f"在此祈愿,请为{user_name}降下指引...",
]
)
)
await asyncio.sleep(1)
x = random.choice(msg)
await roll.send(
random.choice(
[
f"让真寻看看是什么结果!答案是:‘{x}’",
f"根据命运的指引,接下来{user_name} ‘{x}’ 会比较好",
f"祈愿被回应了!是 ‘{x}’!",
f"结束了,{user_name},命运之轮停在了 ‘{x}’!",
]
)
)
logger.info(
f"(USER {event.user_id}, "
f"GROUP {event.group_id if isinstance(event, GroupMessageEvent) else 'private'}) 发送roll:{msg}"
)
+8 -4
View File
@@ -11,6 +11,7 @@ from models.bag_user import BagUser
from services.log import logger from services.log import logger
import time import time
from .data_source import rank from .data_source import rank
from configs.config import MAX_RUSSIAN_BET_GOLD
__plugin_name__ = '俄罗斯轮盘' __plugin_name__ = '俄罗斯轮盘'
@@ -158,7 +159,7 @@ async def _(bot: Bot, event: GroupMessageEvent, state: T_State):
except KeyError: except KeyError:
pass pass
if msg: if msg:
msg = msg.split(' ') msg = msg.split()
if len(msg) == 1: if len(msg) == 1:
msg = msg[0] msg = msg[0]
if is_number(msg) and not (int(msg) < 1 or int(msg) > 6): if is_number(msg) and not (int(msg) < 1 or int(msg) > 6):
@@ -168,8 +169,11 @@ async def _(bot: Bot, event: GroupMessageEvent, state: T_State):
msg = msg[0].strip() msg = msg[0].strip()
if is_number(msg) and not (int(msg) < 1 or int(msg) > 6): if is_number(msg) and not (int(msg) < 1 or int(msg) > 6):
state['bullet_num'] = int(msg) state['bullet_num'] = int(msg)
if is_number(money) and 0 < int(money) <= 1000: if is_number(money) and 0 < int(money) <= MAX_RUSSIAN_BET_GOLD:
state['money'] = int(money) state['money'] = int(money)
else:
state['money'] = 200
await rssian.send(f'赌注金额超过限制(MAX_RUSSIAN_BET_GOLD),已改为200(默认)')
state['at'] = get_message_at(event.json()) state['at'] = get_message_at(event.json())
@@ -182,8 +186,8 @@ async def _(bot: Bot, event: GroupMessageEvent, state: T_State):
user_money = await BagUser.get_gold(event.user_id, event.group_id) user_money = await BagUser.get_gold(event.user_id, event.group_id)
if bullet_num < 0 or bullet_num > 6: if bullet_num < 0 or bullet_num > 6:
await rssian.reject('子弹数量必须大于0小于7!速速重新装弹!') await rssian.reject('子弹数量必须大于0小于7!速速重新装弹!')
if money > 1000: if money > MAX_RUSSIAN_BET_GOLD:
await rssian.finish('太多了!单次金额不能超过1000!', at_sender=True) await rssian.finish(f'太多了!单次金额不能超过{MAX_RUSSIAN_BET_GOLD}!', at_sender=True)
if money > user_money: if money > user_money:
await rssian.finish('你没有足够的钱支撑起这场挑战', at_sender=True) await rssian.finish('你没有足够的钱支撑起这场挑战', at_sender=True)
+1 -1
View File
@@ -73,7 +73,7 @@ async def arg_handle(bot: Bot, event: MessageEvent, state: T_State):
update_buff_session = on_command( update_buff_session = on_command(
"更新cookie", rule=to_me(), permission=SUPERUSER, priority=1 "更新cookie", aliases={'设置cookie'}, rule=to_me(), permission=SUPERUSER, priority=1
) )
+2
View File
@@ -90,6 +90,8 @@ async def search_online_setu(
index = random.randint(1, 100000) if id_ is None else id_ index = random.randint(1, 100000) if id_ is None else id_
path_ = "temp" if not path_ else path_ path_ = "temp" if not path_ else path_
file = f"{index}_temp_setu.jpg" if not path_ else f"{index}.jpg" file = f"{index}_temp_setu.jpg" if not path_ else f"{index}.jpg"
if not os.path.exists(f'{IMAGE_PATH}/{path_}'):
os.mkdir(f'{IMAGE_PATH}/{path_}')
async with aiofiles.open( async with aiofiles.open(
f"{IMAGE_PATH}/{path_}/{file}", "wb" f"{IMAGE_PATH}/{path_}/{file}", "wb"
) as f: ) as f:
+3 -2
View File
@@ -18,7 +18,7 @@ async def _(bot: Bot, event: Event, state: T_State):
3.广播 --> 指令:广播- [msg] 3.广播 --> 指令:广播- [msg]
4.更新色图 4.更新色图
5.回复 --> 指令:/t命令帮助 5.回复 --> 指令:/t命令帮助
6.更新cookie --> 指令:更新cookie [cookie] 6.更新/设置cookie --> 指令:更新/设置cookie [cookie]
7.开启广播通知 --> 指令:开启广播通知 [群号] 7.开启广播通知 --> 指令:开启广播通知 [群号]
8.退群 --> 指令:退群 [群号] 8.退群 --> 指令:退群 [群号]
9.自检 9.自检
@@ -39,5 +39,6 @@ async def _(bot: Bot, event: Event, state: T_State):
24.删除pix图片 *[pid] [-b](同时加入黑名单)? 24.删除pix图片 *[pid] [-b](同时加入黑名单)?
25.查看pix图库 [keyword] 25.查看pix图库 [keyword]
26.pix检测更新 [update] 26.pix检测更新 [update]
27.检查更新真寻""" 27.检查更新真寻
28.真寻重启"""
await super_help.finish(result, at_sender=True) await super_help.finish(result, at_sender=True)
+5 -2
View File
@@ -88,12 +88,14 @@ async def update_setu_img():
_success = 0 _success = 0
error_info = [] error_info = []
error_type = [] error_type = []
count = 0
async with aiohttp.ClientSession(headers=headers) as session: async with aiohttp.ClientSession(headers=headers) as session:
for image in image_list: for image in image_list:
count += 1
path = _path / "_r18" if image.is_r18 else _path / "_setu" path = _path / "_r18" if image.is_r18 else _path / "_setu"
rar_path = "r18_rar" if image.is_r18 else "rar" rar_path = "r18_rar" if image.is_r18 else "rar"
local_image = path / f"{image.local_id}.jpg" local_image = path / f"{image.local_id}.jpg"
if not local_image.exists(): if not local_image.exists() or not image.img_hash:
for _ in range(3): for _ in range(3):
try: try:
async with session.get( async with session.get(
@@ -153,9 +155,10 @@ async def update_setu_img():
) )
else: else:
logger.info(f'更新色图 {image.local_id}.jpg 已存在') logger.info(f'更新色图 {image.local_id}.jpg 已存在')
error_info = ['无报错..'] if not error_info else error_info
await get_bot().send_private_msg( await get_bot().send_private_msg(
user_id=int(list(get_bot().config.superusers)[0]), user_id=int(list(get_bot().config.superusers)[0]),
message=f'{str(datetime.now()).split(".")[0]} 更新 色图 完成,实际更新 {_success} 张,以下为更新时未知错误:\n' message=f'{str(datetime.now()).split(".")[0]} 更新 色图 完成,本地存在 {count} 张,实际更新 {_success} 张,以下为更新时未知错误:\n'
+ "\n".join(error_info), + "\n".join(error_info),
) )
+2 -1
View File
@@ -3,6 +3,7 @@ from .data_source import get_yiqing_data
from services.log import logger from services.log import logger
from nonebot.adapters.cqhttp import Bot, MessageEvent, GroupMessageEvent from nonebot.adapters.cqhttp import Bot, MessageEvent, GroupMessageEvent
from nonebot.typing import T_State from nonebot.typing import T_State
from utils.utils import get_message_text
__plugin_name__ = "疫情查询" __plugin_name__ = "疫情查询"
__plugin_usage__ = "查询疫情帮助:\n\t对我说 查询疫情 省份/城市,我会回复疫情的实时数据\n\t示例: 查询疫情 温州" __plugin_usage__ = "查询疫情帮助:\n\t对我说 查询疫情 省份/城市,我会回复疫情的实时数据\n\t示例: 查询疫情 温州"
@@ -13,7 +14,7 @@ yiqing = on_command("疫情", aliases={"查询疫情", "疫情查询"}, priority
@yiqing.handle() @yiqing.handle()
async def _(bot: Bot, event: MessageEvent, state: T_State): async def _(bot: Bot, event: MessageEvent, state: T_State):
msg = str(event.get_message()).strip() msg = get_message_text(event.json())
result = await get_yiqing_data(msg) result = await get_yiqing_data(msg)
if result: if result:
await yiqing.send(result) await yiqing.send(result)
+4 -3
View File
@@ -25,12 +25,13 @@ async def get_yiqing_data(area: str):
if area == '中国': if area == '中国':
province = area province = area
province_type = "" province_type = ""
elif area in data.keys(): elif area in data.keys() and area[-1] != '市':
province = area province = area if area[-1] != '省' else area[:-1]
if len(data[area]) == 1: if len(data[province]) == 1:
province_type = "市" province_type = "市"
city = "" city = ""
else: else:
area = area[:-1] if area[-1] == '市' else area
for p in data.keys(): for p in data.keys():
if area in data[p]: if area in data[p]:
province = p province = p
+18 -3
View File
@@ -1,5 +1,20 @@
{ {
"update_file": ["plugins/parse_bilibili_json.py", "plugins/super_help", "plugins/weather", "models/pixiv.py"], "update_file": [
"add_file": ["services/__init__.py"], "configs/config.py",
"delete_file": [] "plugins/auto_invite",
"plugins/ban",
"plugins/check_zhenxun_update",
"plugins/genshin/material_remind",
"plugins/genshin/query_resource_points",
"plugins/help",
"plugins/russian",
"plugins/search_buff_skin_price",
"plugins/super_help",
"plugins/update_setu",
"plugins/yiqing",
"bot.py",
"plugins/admin_bot_manage/update_group_member_info.py"
],
"add_file": ["plugins/nbnhhsh.py", "plugins/roll.py"],
"delete_file": [" plugins/admin_bot_manage/__init__.py"]
} }