格式化提交

This commit is contained in:
MingxuanGame 2022-02-14 19:18:20 +08:00
parent 5ca303c2f9
commit 47a9595785
5 changed files with 505 additions and 361 deletions

1
.gitignore vendored Normal file
View File

@ -0,0 +1 @@
/.idea/

View File

@ -49,8 +49,9 @@ else
- [PaimonBot](https://github.com/XiaoMiku01/PaimonBot) - 插件原始代码来自于它 - [PaimonBot](https://github.com/XiaoMiku01/PaimonBot) - 插件原始代码来自于它
- [YuanShen_User_Info](https://github.com/Womsxd/YuanShen_User_Info) - 米游社API来自于它 - [YuanShen_User_Info](https://github.com/Womsxd/YuanShen_User_Info) - 米游社API来自于它
- [MiniGG](https://www.minigg.cn/)* - Wiki API来自于它 - *[MiniGG](https://www.minigg.cn/)* - Wiki API来自于它
- [@MingxuanGame](https://github.com/MingxuanGame) - 移植Nonebot2至[nonebot2-beta1](https://github.com/KimigaiiWuyi/GenshinUID/tree/nonebot2-beta1) - [@MingxuanGame](https://github.com/MingxuanGame) -
移植Nonebot2至[nonebot2-beta1](https://github.com/KimigaiiWuyi/GenshinUID/tree/nonebot2-beta1)
- [@AMEKENN](https://github.com/AMEKENN) - 米游社签到部分的代码指导 - [@AMEKENN](https://github.com/AMEKENN) - 米游社签到部分的代码指导
- [@lgc233](https://github.com/lgc2333) - 众多优秀PR贡献 - [@lgc233](https://github.com/lgc2333) - 众多优秀PR贡献
- [@RemKeeper](https://github.com/RemKeeper) - 简易Cookies获取文档 - [@RemKeeper](https://github.com/RemKeeper) - 简易Cookies获取文档

View File

@ -1,109 +1,136 @@
from .getDB import (CheckDB, OpenPush, connectDB, deletecache, selectDB, get_alots, config_check)
from .getImg import (draw_abyss0_pic, draw_abyss_pic, draw_event_pic, draw_pic, draw_wordcloud)
from .getMes import (foods_wiki, artifacts_wiki, enemies_wiki, sign, daily, weapon_wiki, char_wiki, audio_wiki, award, deal_ck)
from nonebot import *
from hoshino import Service,R,priv,util
from hoshino.typing import MessageSegment,CQEvent, HoshinoBot
import hoshino
import asyncio import asyncio
import sqlite3,random,traceback,os,re
import base64 import base64
import traceback
from aiocqhttp.exceptions import ActionFailed
from hoshino import Service
from hoshino.typing import CQEvent, HoshinoBot
from nonebot import get_bot, logger
from .get_data import *
from .get_image import *
from .get_mihoyo_bbs_data import *
sv = Service('genshinuid') sv = Service('genshinuid')
bot = get_bot() hoshino_bot = get_bot()
FILE_PATH = os.path.join(os.path.dirname(__file__), 'mys')
INDEX_PATH = os.path.join(FILE_PATH, 'index')
Texture_PATH = os.path.join(FILE_PATH, 'texture2d')
FILE_PATH = os.path.dirname(__file__)
FILE2_PATH = os.path.join(FILE_PATH,'mys')
INDEX_PATH = os.path.join(FILE2_PATH, 'index')
Texture_PATH = os.path.join(FILE2_PATH,'texture2d')
@sv.on_prefix('语音') @sv.on_prefix('语音')
async def _(bot:HoshinoBot, ev: CQEvent): async def send_audio(bot: HoshinoBot, ev: CQEvent):
try: try:
message = ev.message.extract_plain_text() message = ev.message.extract_plain_text()
message = message.replace(' ', "") message = message.replace(' ', "")
name = ''.join(re.findall('[\u4e00-\u9fa5]', message)) name = ''.join(re.findall('[\u4e00-\u9fa5]', message))
im = await audio_wiki(name, message) im = await audio_wiki(name, message)
await bot.send(ev, im) await bot.send(ev, im)
except ActionFailed as e:
await bot.send(ev, "机器人发送消息失败:{}".format(e))
except Exception as e: except Exception as e:
traceback.print_exc() logger.exception("获取语音失败")
await bot.send(ev, "发生错误 {},请检查后台输出。".format(e)) await bot.send(ev, "发生错误 {},请检查后台输出。".format(e))
@sv.on_fullmatch('活动列表') @sv.on_fullmatch('活动列表')
async def _(bot:HoshinoBot, ev: CQEvent): async def send_polar(bot: HoshinoBot, ev: CQEvent):
try: try:
img_path = os.path.join(FILE2_PATH,"event.jpg") img_path = os.path.join(FILE_PATH, "event.jpg")
while(1): while 1:
if os.path.exists(img_path): if os.path.exists(img_path):
f = open(img_path, 'rb') f = open(img_path, 'rb')
ls_f = base64.b64encode(f.read()).decode() ls_f = base64.b64encode(f.read()).decode()
imgmes = 'base64://' + ls_f img_mihoyo_bbs = 'base64://' + ls_f
f.close() f.close()
im = f"[CQ:image,file={imgmes}]" im = f"[CQ:image,file={img_mihoyo_bbs}]"
break break
else: else:
await draw_event_pic() await draw_event_pic()
await bot.send(ev, im) await bot.send(ev, im)
except ActionFailed as e:
await bot.send(ev, "机器人发送消息失败:{}".format(e))
logger.exception("发送活动列表失败")
except Exception as e: except Exception as e:
traceback.print_exc()
await bot.send(ev, "发生错误 {},请检查后台输出。".format(e)) await bot.send(ev, "发生错误 {},请检查后台输出。".format(e))
logger.exception("获取活动列表错误")
@sv.on_fullmatch('御神签') @sv.on_fullmatch('御神签')
async def _(bot:HoshinoBot, ev: CQEvent): async def send_lots(bot: HoshinoBot, ev: CQEvent):
try: try:
qid = ev.sender["user_id"] qid = ev.sender["user_id"]
raw_data = await get_alots(qid) raw_data = await get_a_lots(qid)
im = base64.b64decode(raw_data).decode("utf-8") im = base64.b64decode(raw_data).decode("utf-8")
await bot.send(ev, im) await bot.send(ev, im)
except ActionFailed as e:
await bot.send(ev, "机器人发送消息失败:{}".format(e))
logger.exception("发送御神签失败")
except Exception as e: except Exception as e:
traceback.print_exc()
await bot.send(ev, "发生错误 {},请检查后台输出。".format(e)) await bot.send(ev, "发生错误 {},请检查后台输出。".format(e))
logger.exception("获取御神签错误")
@sv.on_prefix('材料') @sv.on_prefix('材料')
async def _(bot:HoshinoBot, ev: CQEvent): async def send_cost(bot: HoshinoBot, ev: CQEvent):
try: try:
message = ev.message.extract_plain_text() message = ev.message.extract_plain_text()
message = message.replace(' ', "") message = message.replace(' ', "")
im = await char_wiki(message, "costs") im = await char_wiki(message, "costs")
await bot.send(ev, im) await bot.send(ev, im)
except ActionFailed as e:
await bot.send(ev, "机器人发送消息失败:{}".format(e))
logger.exception("发送材料信息失败")
except Exception as e: except Exception as e:
traceback.print_exc()
await bot.send(ev, "发生错误 {},请检查后台输出。".format(e)) await bot.send(ev, "发生错误 {},请检查后台输出。".format(e))
logger.exception("获取材料信息错误")
@sv.on_prefix('原魔') @sv.on_prefix('原魔')
async def _(bot:HoshinoBot, ev: CQEvent): async def send_enemies(bot: HoshinoBot, ev: CQEvent):
try: try:
message = ev.message.extract_plain_text() message = ev.message.extract_plain_text()
im = await enemies_wiki(message) im = await enemies_wiki(message)
await bot.send(ev, im) await bot.send(ev, im)
except ActionFailed as e:
await bot.send(ev, "机器人发送消息失败:{}".format(e))
logger.exception("发送怪物信息失败")
except Exception as e: except Exception as e:
traceback.print_exc()
await bot.send(ev, "发生错误 {},请检查后台输出。".format(e)) await bot.send(ev, "发生错误 {},请检查后台输出。".format(e))
logger.exception("获取怪物信息错误")
@sv.on_prefix('食物') @sv.on_prefix('食物')
async def _(bot:HoshinoBot, ev: CQEvent): async def send_food(bot: HoshinoBot, ev: CQEvent):
try: try:
message = ev.message.extract_plain_text() message = ev.message.extract_plain_text()
im = await foods_wiki(message) im = await foods_wiki(message)
await bot.send(ev, im) await bot.send(ev, im)
except ActionFailed as e:
await bot.send(ev, "机器人发送消息失败:{}".format(e))
logger.exception("发送食物信息失败")
except Exception as e: except Exception as e:
traceback.print_exc()
await bot.send(ev, "发生错误 {},请检查后台输出。".format(e)) await bot.send(ev, "发生错误 {},请检查后台输出。".format(e))
logger.exception("获取食物信息错误")
@sv.on_prefix('圣遗物') @sv.on_prefix('圣遗物')
async def _(bot:HoshinoBot, ev: CQEvent): async def send_artifacts(bot: HoshinoBot, ev: CQEvent):
try: try:
message = ev.message.extract_plain_text() message = ev.message.extract_plain_text()
im = await artifacts_wiki(message) im = await artifacts_wiki(message)
await bot.send(ev, im) await bot.send(ev, im)
except ActionFailed as e:
await bot.send(ev, "机器人发送消息失败:{}".format(e))
logger.exception("发送圣遗物信息失败")
except Exception as e: except Exception as e:
traceback.print_exc()
await bot.send(ev, "发生错误 {},请检查后台输出。".format(e)) await bot.send(ev, "发生错误 {},请检查后台输出。".format(e))
logger.exception("获取圣遗物信息错误")
@sv.on_prefix('天赋') @sv.on_prefix('天赋')
async def _(bot:HoshinoBot, ev: CQEvent): async def send_talents(bot: HoshinoBot, ev: CQEvent):
try: try:
message = ev.message.extract_plain_text() message = ev.message.extract_plain_text()
name = ''.join(re.findall('[\u4e00-\u9fa5]', message)) name = ''.join(re.findall('[\u4e00-\u9fa5]', message))
@ -113,12 +140,16 @@ async def _(bot:HoshinoBot, ev: CQEvent):
else: else:
im = "参数不正确。" im = "参数不正确。"
await bot.send(ev, im) await bot.send(ev, im)
except ActionFailed as e:
await bot.send(ev, "机器人发送消息失败:{}".format(e))
logger.exception("发送天赋信息失败")
except Exception as e: except Exception as e:
traceback.print_exc()
await bot.send(ev, "发生错误 {},请检查后台输出。".format(e)) await bot.send(ev, "发生错误 {},请检查后台输出。".format(e))
logger.exception("获取天赋信息错误")
@sv.on_prefix('武器') @sv.on_prefix('武器')
async def _(bot:HoshinoBot, ev: CQEvent): async def send_weapon(bot: HoshinoBot, ev: CQEvent):
try: try:
message = ev.message.extract_plain_text() message = ev.message.extract_plain_text()
name = ''.join(re.findall('[\u4e00-\u9fa5]', message)) name = ''.join(re.findall('[\u4e00-\u9fa5]', message))
@ -128,12 +159,16 @@ async def _(bot:HoshinoBot, ev: CQEvent):
else: else:
im = await weapon_wiki(name) im = await weapon_wiki(name)
await bot.send(ev, im, at_sender=True) await bot.send(ev, im, at_sender=True)
except ActionFailed as e:
await bot.send(ev, "机器人发送消息失败:{}".format(e))
logger.exception("发送武器信息失败")
except Exception as e: except Exception as e:
traceback.print_exc()
await bot.send(ev, "发生错误 {},请检查后台输出。".format(e)) await bot.send(ev, "发生错误 {},请检查后台输出。".format(e))
logger.exception("获取武器信息错误")
@sv.on_prefix('角色') @sv.on_prefix('角色')
async def _(bot:HoshinoBot, ev: CQEvent): async def send_char(bot: HoshinoBot, ev: CQEvent):
try: try:
message = ev.message.extract_plain_text() message = ev.message.extract_plain_text()
message = message.replace(' ', "") message = message.replace(' ', "")
@ -144,12 +179,16 @@ async def _(bot:HoshinoBot, ev: CQEvent):
else: else:
im = await char_wiki(name) im = await char_wiki(name)
await bot.send(ev, im) await bot.send(ev, im)
except ActionFailed as e:
await bot.send(ev, "机器人发送消息失败:{}".format(e))
logger.exception("发送角色信息失败")
except Exception as e: except Exception as e:
traceback.print_exc()
await bot.send(ev, "发生错误 {},请检查后台输出。".format(e)) await bot.send(ev, "发生错误 {},请检查后台输出。".format(e))
logger.exception("获取角色信息错误")
@sv.on_prefix('命座') @sv.on_prefix('命座')
async def _(bot:HoshinoBot, ev: CQEvent): async def send_polar(bot: HoshinoBot, ev: CQEvent):
try: try:
message = ev.message.extract_plain_text() message = ev.message.extract_plain_text()
num = int(re.findall(r"\d+", message)[0]) # str num = int(re.findall(r"\d+", message)[0]) # str
@ -159,36 +198,61 @@ async def _(bot:HoshinoBot, ev: CQEvent):
else: else:
im = await char_wiki(m, "constellations", num) im = await char_wiki(m, "constellations", num)
await bot.send(ev, im, at_sender=True) await bot.send(ev, im, at_sender=True)
except ActionFailed as e:
await bot.send(ev, "机器人发送消息失败:{}".format(e))
logger.exception("发送命座信息失败")
except Exception as e: except Exception as e:
traceback.print_exc()
await bot.send(ev, "发生错误 {},请检查后台输出。".format(e)) await bot.send(ev, "发生错误 {},请检查后台输出。".format(e))
logger.exception("获取命座信息错误")
# 每日零点清空cookies使用缓存 # 每日零点清空cookies使用缓存
@sv.scheduled_job('cron', hour='0') @sv.scheduled_job('cron', hour='0')
async def delete(): async def clean_cache():
await deletecache() await delete_cache()
@sv.scheduled_job('cron', hour='2') @sv.scheduled_job('cron', hour='2')
async def delete(): async def draw_event():
await draw_event_pic() await draw_event_pic()
@sv.on_fullmatch('全部重签') @sv.on_fullmatch('全部重签')
async def _(bot: HoshinoBot, ev: CQEvent): async def _(bot: HoshinoBot, ev: CQEvent):
try: try:
if ev.user_id not in bot.config.SUPERUSERS: if ev.user_id not in bot.config.SUPERUSERS:
return return
await bot.send(ev, "已开始执行") await bot.send(ev, "已开始执行")
await dailysign() await daily_sign()
except ActionFailed as e:
await bot.send(ev, "机器人发送消息失败:{}".format(e))
except Exception as e: except Exception as e:
traceback.print_exc() traceback.print_exc()
await bot.send(ev, "发生错误 {},请检查后台输出。".format(e)) await bot.send(ev, "发生错误 {},请检查后台输出。".format(e))
# 每隔半小时检测树脂是否超过设定值
@sv.scheduled_job('cron', minute="*/30")
async def push():
daily_data = await daily()
if daily_data is not None:
for i in daily_data:
if i['gid'] == "on":
await hoshino_bot.send_private_msg(user_id=i['qid'], message=i['message'])
else:
await hoshino_bot.send_group_msg(group_id=i['gid'], message=f"[CQ:at,qq={i['qid']}]"
+ "\n" + i['message'])
else:
pass
# 每日零点半进行米游社签到 # 每日零点半进行米游社签到
@sv.scheduled_job('cron', hour='0', minute="30") @sv.scheduled_job('cron', hour='0', minute="30")
async def dailysign(): async def daily_sign_schedule():
await dailysign() await daily_sign()
async def dailysign():
async def daily_sign():
conn = sqlite3.connect('ID_DATA.db') conn = sqlite3.connect('ID_DATA.db')
c = conn.cursor() c = conn.cursor()
cursor = c.execute( cursor = c.execute(
@ -199,10 +263,9 @@ async def dailysign():
im = await sign(str(row[0])) im = await sign(str(row[0]))
if row[4] == "on": if row[4] == "on":
try: try:
await bot.send_private_msg(user_id = row[2],message = im) await hoshino_bot.send_private_msg(user_id=row[2], message=im)
except: except:
traceback.print_exc() logger.exception(f"{im} Error")
print(im + "\nerror")
else: else:
message = f"[CQ:at,qq={row[2]}]\n{im}" message = f"[CQ:at,qq={row[2]}]\n{im}"
if await config_check("SignReportSimple"): if await config_check("SignReportSimple"):
@ -232,37 +295,25 @@ async def dailysign():
for i in temp_list: for i in temp_list:
try: try:
report = "以下为签到失败报告:{}".format(i["push_message"]) if i["push_message"] != "" else "" report = "以下为签到失败报告:{}".format(i["push_message"]) if i["push_message"] != "" else ""
await bot.send_group_msg(group_id = i["push_group"],message = "今日自动签到已完成!\n本群共签到成功{}人,共签到失败{}人。{}".format(i["success"],i["failed"],report)) await hoshino_bot.send_group_msg(group_id=i["push_group"],
message="今日自动签到已完成!\n本群共签到成功{}人,"
"共签到失败{}人。{}".format(i["success"], i["failed"], report))
except: except:
traceback.print_exc() logger.exception("签到报告发送失败:{}".format(i["push_message"]))
print(i["push_message"])
await asyncio.sleep(4 + random.randint(1, 3)) await asyncio.sleep(4 + random.randint(1, 3))
else: else:
for i in temp_list: for i in temp_list:
try: try:
await bot.send_group_msg(group_id = i["push_group"],message = i["push_message"]) await hoshino_bot.send_group_msg(group_id=i["push_group"], message=i["push_message"])
except: except:
traceback.print_exc() logger.exception("签到报告发送失败:{}".format(i["push_message"]))
print(i["push_message"])
await asyncio.sleep(4 + random.randint(1, 3)) await asyncio.sleep(4 + random.randint(1, 3))
conn.close() conn.close()
return return
#每隔半小时检测树脂是否超过设定值
@sv.scheduled_job('interval', hours = 1)
async def push():
daily_data = await daily()
if daily_data != None:
for i in daily_data:
if i['gid'] == "on":
await bot.send_private_msg(user_id = i['qid'],message = i['message'])
else:
await bot.send_group_msg(group_id = i['gid'],message = f"[CQ:at,qq={i['qid']}]" + "\n" + i['message'])
else:
pass
# 私聊事件 # 私聊事件
@bot.on_message('private') @hoshino_bot.on_message('private')
async def setting(ctx): async def setting(ctx):
message = ctx['raw_message'] message = ctx['raw_message']
sid = int(ctx["self_id"]) sid = int(ctx["self_id"])
@ -272,85 +323,113 @@ async def setting(ctx):
try: try:
mes = message.replace('添加 ', '') mes = message.replace('添加 ', '')
await deal_ck(mes, userid) await deal_ck(mes, userid)
await bot.send_msg(self_id=sid, user_id=userid, group_id=gid, message=f'添加Cookies成功\nCookies属于个人重要信息如果你是在不知情的情况下添加请马上修改米游社账户密码保护个人隐私\n————\n如果需要【开启自动签到】和【开启推送】还需要使用命令“绑定uid”绑定你的uid。\n例如绑定uid123456789。') await hoshino_bot.send_msg(self_id=sid, user_id=userid, group_id=gid,
message=f'添加Cookies成功\nCookies属于个人重要信息如果你是在不知情的情况下添加'
f'请马上修改米游社账户密码,保护个人隐私!\n————\n'
f'如果需要【开启自动签到】和【开启推送】还需要使用命令“绑定uid”绑定你的uid。\n'
f'例如绑定uid123456789。')
except ActionFailed as e:
await hoshino_bot.send_msg(self_id=sid, user_id=userid, group_id=gid,
message="机器人发送消息失败:{}".format(e))
logger.exception("发送Cookie校验信息失败")
except Exception as e: except Exception as e:
traceback.print_exc() await hoshino_bot.send_msg(self_id=sid, user_id=userid, group_id=gid,
await bot.send_msg(self_id=sid, user_id=userid, group_id=gid, message='校验失败请输入正确的Cookies\n错误信息为{}'.format(e)) message='校验失败请输入正确的Cookies\n错误信息为{}'.format(e))
logger.exception("Cookie校验失败")
elif '开启推送' in message: elif '开启推送' in message:
try: try:
uid = await selectDB(userid,mode = "uid") uid = await select_db(userid, mode="uid")
im = await OpenPush(int(uid[0]),userid,"on","StatusA") im = await open_push(int(uid[0]), userid, "on", "StatusA")
await bot.send_msg(self_id=sid, user_id=userid, group_id=gid, message=im) await hoshino_bot.send_msg(self_id=sid, user_id=userid, group_id=gid, message=im)
except Exception as e: except ActionFailed as e:
traceback.print_exc() await hoshino_bot.send_msg(self_id=sid, user_id=userid, group_id=gid,
await bot.send_msg(self_id=sid, user_id=userid, group_id=gid, message="未找到uid绑定记录。") message="机器人发送消息失败:{}".format(e))
logger.exception("私聊)发送开启推送信息失败")
except Exception:
await hoshino_bot.send_msg(self_id=sid, user_id=userid, group_id=gid, message="未找到uid绑定记录。")
logger.exception("开启推送失败")
elif '关闭推送' in message: elif '关闭推送' in message:
try: try:
uid = await selectDB(userid,mode = "uid") uid = await select_db(userid, mode="uid")
im = await OpenPush(int(uid[0]),userid,"off","StatusA") im = await open_push(int(uid[0]), userid, "off", "StatusA")
await bot.send_msg(self_id=sid, user_id=userid, group_id=gid, message=im) await hoshino_bot.send_msg(self_id=sid, user_id=userid, group_id=gid, message=im)
except Exception as e: except ActionFailed as e:
traceback.print_exc() await hoshino_bot.send_msg(self_id=sid, user_id=userid, group_id=gid,
await bot.send_msg(self_id=sid, user_id=userid, group_id=gid, message="未找到uid绑定记录。") message="机器人发送消息失败:{}".format(e))
logger.exception("私聊)发送关闭推送信息失败")
except Exception:
await hoshino_bot.send_msg(self_id=sid, user_id=userid, group_id=gid, message="未找到uid绑定记录。")
logger.exception("关闭推送失败")
elif '开启自动签到' in message: elif '开启自动签到' in message:
try: try:
uid = await selectDB(userid,mode = "uid") uid = await select_db(userid, mode="uid")
im = await OpenPush(int(uid[0]),userid,"on","StatusB") im = await open_push(int(uid[0]), userid, "on", "StatusB")
await bot.send_msg(self_id=sid, user_id=userid, group_id=gid, message=im) await hoshino_bot.send_msg(self_id=sid, user_id=userid, group_id=gid, message=im)
except Exception as e: except ActionFailed as e:
await hoshino_bot.send_msg(self_id=sid, user_id=userid, group_id=gid,
message="机器人发送消息失败:{}".format(e))
logger.exception("私聊)发送开启自动签到信息失败")
except Exception:
traceback.print_exc() traceback.print_exc()
await bot.send_msg(self_id=sid, user_id=userid, group_id=gid, message="未找到uid绑定记录。") await hoshino_bot.send_msg(self_id=sid, user_id=userid, group_id=gid, message="未找到uid绑定记录。")
logger.exception("开启自动签到失败")
elif '关闭自动签到' in message: elif '关闭自动签到' in message:
try: try:
uid = await selectDB(userid,mode = "uid") uid = await select_db(userid, mode="uid")
im = await OpenPush(int(uid[0]),userid,"off","StatusA") im = await open_push(int(uid[0]), userid, "off", "StatusA")
await bot.send_msg(self_id=sid, user_id=userid, group_id=gid, message=im) await hoshino_bot.send_msg(self_id=sid, user_id=userid, group_id=gid, message=im)
except Exception as e: except ActionFailed as e:
await hoshino_bot.send_msg(self_id=sid, user_id=userid, group_id=gid,
message="机器人发送消息失败:{}".format(e))
logger.exception("私聊)发送关闭自动签到信息失败")
except Exception:
traceback.print_exc() traceback.print_exc()
await bot.send_msg(self_id=sid, user_id=userid, group_id=gid, message="未找到uid绑定记录。") await hoshino_bot.send_msg(self_id=sid, user_id=userid, group_id=gid, message="未找到uid绑定记录。")
logger.exception("关闭自动签到失败")
# 群聊开启 自动签到 和 推送树脂提醒 功能 # 群聊开启 自动签到 和 推送树脂提醒 功能
@sv.on_prefix('开启') @sv.on_prefix('开启')
async def _(bot:HoshinoBot, ev: CQEvent): async def open_switch_func(bot: HoshinoBot, ev: CQEvent):
try: try:
message = ev.message.extract_plain_text() message = ev.message.extract_plain_text()
m = ''.join(re.findall('[\u4e00-\u9fa5]', message)) m = ''.join(re.findall('[\u4e00-\u9fa5]', message))
qid = ev.sender["user_id"] qid = ev.sender["user_id"]
at = re.search(r"\[CQ:at,qq=(\d*)\]", message) at = re.search(r"\[CQ:at,qq=(\d*)]", message)
if m == "自动签到": if m == "自动签到":
try: try:
if at and qid in bot.config.SUPERUSERS: if at:
qid = at.group(1) if at and at.group(1) != qid:
elif at and at.group(1) != qid:
await bot.send(ev, "你没有权限。", at_sender=True) await bot.send(ev, "你没有权限。", at_sender=True)
return return
else:
pass
gid = ev.group_id gid = ev.group_id
uid = await selectDB(ev.sender['user_id'],mode = "uid") uid = await select_db(ev.sender['user_id'], mode="uid")
im = await OpenPush(int(uid[0]),ev.sender['user_id'],str(gid),"StatusB") im = await open_push(int(uid[0]), ev.sender['user_id'], str(gid), "StatusB")
await bot.send(ev, im, at_sender=True) await bot.send(ev, im, at_sender=True)
except Exception as e: except ActionFailed as e:
traceback.print_exc() await bot.send(ev, "机器人发送消息失败:{}".format(e))
logger.exception("发送开启自动签到信息失败")
except Exception:
await bot.send(ev, "未绑定uid信息", at_sender=True) await bot.send(ev, "未绑定uid信息", at_sender=True)
logger.exception("开启自动签到失败")
elif m == "推送": elif m == "推送":
try: try:
if at and qid in bot.config.SUPERUSERS: if at:
qid = at.group(1) if at and at.group(1) != qid:
elif at and at.group(1) != qid:
await bot.send(ev, "你没有权限。", at_sender=True) await bot.send(ev, "你没有权限。", at_sender=True)
return return
else:
pass
gid = ev.group_id gid = ev.group_id
uid = await selectDB(ev.sender['user_id'],mode = "uid") uid = await select_db(ev.sender['user_id'], mode="uid")
im = await OpenPush(int(uid[0]),ev.sender['user_id'],str(gid),"StatusA") im = await open_push(int(uid[0]), ev.sender['user_id'], str(gid), "StatusA")
await bot.send(ev, im, at_sender=True) await bot.send(ev, im, at_sender=True)
except Exception as e: except ActionFailed as e:
traceback.print_exc() await bot.send(ev, "机器人发送消息失败:{}".format(e))
logger.exception("发送开启推送信息失败")
except Exception:
await bot.send(ev, "未绑定uid信息", at_sender=True) await bot.send(ev, "未绑定uid信息", at_sender=True)
logger.exception("开启推送失败")
elif m == "简洁签到报告": elif m == "简洁签到报告":
try: try:
if qid in bot.config.SUPERUSERS: if qid in bot.config.SUPERUSERS:
@ -358,55 +437,57 @@ async def _(bot:HoshinoBot, ev: CQEvent):
await bot.send(ev, "成功!", at_sender=True) await bot.send(ev, "成功!", at_sender=True)
else: else:
return return
except ActionFailed as e:
await bot.send(ev, "机器人发送消息失败:{}".format(e))
logger.exception("发送设置成功信息失败")
except Exception as e: except Exception as e:
await bot.send(ev, "发生错误 {},请检查后台输出。".format(e)) await bot.send(ev, "发生错误 {},请检查后台输出。".format(e))
traceback.print_exc() logger.exception("设置简洁签到报告失败")
except Exception as e: except Exception as e:
traceback.print_exc()
await bot.send(ev, "发生错误 {},请检查后台输出。".format(e)) await bot.send(ev, "发生错误 {},请检查后台输出。".format(e))
logger.exception("开启功能失败")
# 群聊关闭 自动签到 和 推送树脂提醒 功能 # 群聊关闭 自动签到 和 推送树脂提醒 功能
@sv.on_prefix('关闭') @sv.on_prefix('关闭')
async def _(bot:HoshinoBot, ev: CQEvent): async def close_switch_func(bot: HoshinoBot, ev: CQEvent):
try: try:
message = ev.message.extract_plain_text() message = ev.message.extract_plain_text()
m = ''.join(re.findall('[\u4e00-\u9fa5]', message)) m = ''.join(re.findall('[\u4e00-\u9fa5]', message))
qid = ev.sender["user_id"] qid = ev.sender["user_id"]
at = re.search(r"\[CQ:at,qq=(\d*)\]", message) at = re.search(r"\[CQ:at,qq=(\d*)]", message)
if m == "自动签到": if m == "自动签到":
try: try:
if at and qid in bot.config.SUPERUSERS: if at:
qid = at.group(1) if at and at.group(1) != qid:
elif at and at.group(1) != qid:
await bot.send(ev, "你没有权限。", at_sender=True) await bot.send(ev, "你没有权限。", at_sender=True)
return return
else: uid = await select_db(ev.sender['user_id'], mode="uid")
pass im = await open_push(int(uid[0]), ev.sender['user_id'], "off", "StatusB")
gid = ev.group_id
uid = await selectDB(ev.sender['user_id'],mode = "uid")
im = await OpenPush(int(uid[0]),ev.sender['user_id'],"off","StatusB")
await bot.send(ev, im, at_sender=True) await bot.send(ev, im, at_sender=True)
except Exception as e: except ActionFailed as e:
traceback.print_exc() await bot.send(ev, "机器人发送消息失败:{}".format(e))
logger.exception("发送关闭自动签到信息失败")
except Exception:
await bot.send(ev, "未绑定uid信息", at_sender=True) await bot.send(ev, "未绑定uid信息", at_sender=True)
logger.exception("关闭自动签到失败")
elif m == "推送": elif m == "推送":
try: try:
if at and qid in bot.config.SUPERUSERS: if at:
qid = at.group(1) if at and at.group(1) != qid:
elif at and at.group(1) != qid:
await bot.send(ev, "你没有权限。", at_sender=True) await bot.send(ev, "你没有权限。", at_sender=True)
return return
else: uid = await select_db(ev.sender['user_id'], mode="uid")
pass im = await open_push(int(uid[0]), ev.sender['user_id'], "off", "StatusA")
gid = ev.group_id
uid = await selectDB(ev.sender['user_id'],mode = "uid")
im = await OpenPush(int(uid[0]),ev.sender['user_id'],"off","StatusA")
await bot.send(ev, im, at_sender=True) await bot.send(ev, im, at_sender=True)
except Exception as e: except ActionFailed as e:
traceback.print_exc() await bot.send(ev, "机器人发送消息失败:{}".format(e))
logger.exception("发送关闭推送信息失败")
except Exception:
await bot.send(ev, "未绑定uid信息", at_sender=True) await bot.send(ev, "未绑定uid信息", at_sender=True)
logger.exception("关闭推送失败")
elif m == "简洁签到报告": elif m == "简洁签到报告":
try: try:
if qid in bot.config.SUPERUSERS: if qid in bot.config.SUPERUSERS:
@ -414,73 +495,94 @@ async def _(bot:HoshinoBot, ev: CQEvent):
await bot.send(ev, "成功!", at_sender=True) await bot.send(ev, "成功!", at_sender=True)
else: else:
return return
except ActionFailed as e:
await bot.send("机器人发送消息失败:{}".format(e))
logger.exception("发送设置成功信息失败")
except Exception as e:
await bot.send("发生错误 {},请检查后台输出。".format(e))
logger.exception("设置简洁签到报告失败")
except Exception as e: except Exception as e:
await bot.send(ev, "发生错误 {},请检查后台输出。".format(e)) await bot.send(ev, "发生错误 {},请检查后台输出。".format(e))
traceback.print_exc() logger.exception("关闭功能失败")
except Exception as e:
traceback.print_exc()
await bot.send(ev,"发生错误 {},请检查后台输出。".format(e))
# 群聊内 每月统计 功能 # 群聊内 每月统计 功能
@sv.on_fullmatch('每月统计') @sv.on_fullmatch('每月统计')
async def _(bot:HoshinoBot, ev: CQEvent): async def send_monthly_data(bot: HoshinoBot, ev: CQEvent):
try: try:
qid = ev.sender["user_id"] uid = await select_db(ev.sender['user_id'], mode="uid")
uid = await selectDB(ev.sender['user_id'],mode = "uid")
uid = uid[0] uid = uid[0]
im = await award(uid) im = await award(uid)
await bot.send(ev, im, at_sender=True) await bot.send(ev, im, at_sender=True)
except Exception as e: except ActionFailed as e:
traceback.print_exc() await bot.send(ev, "机器人发送消息失败:{}".format(e))
logger.exception("发送每月统计信息失败")
except Exception:
await bot.send(ev, '未找到绑定信息', at_sender=True) await bot.send(ev, '未找到绑定信息', at_sender=True)
logger.exception("获取每月统计失败")
# 群聊内 签到 功能 # 群聊内 签到 功能
@sv.on_fullmatch('签到') @sv.on_fullmatch('签到')
async def _(bot:HoshinoBot, ev: CQEvent): async def get_sing_func(bot: HoshinoBot, ev: CQEvent):
try: try:
qid = ev.sender["user_id"] uid = await select_db(ev.sender['user_id'], mode="uid")
uid = await selectDB(ev.sender['user_id'],mode = "uid")
uid = uid[0] uid = uid[0]
im = await sign(uid) im = await sign(uid)
await bot.send(ev, im, at_sender=True) await bot.send(ev, im, at_sender=True)
except Exception as e: except ActionFailed as e:
traceback.print_exc() await bot.send(ev, "机器人发送消息失败:{}".format(e))
logger.exception("发送签到信息失败")
except Exception:
await bot.send(ev, '未找到绑定信息', at_sender=True) await bot.send(ev, '未找到绑定信息', at_sender=True)
logger.exception("签到失败")
# 群聊内 校验Cookies 是否正常的功能,不正常自动删掉 # 群聊内 校验Cookies 是否正常的功能,不正常自动删掉
@sv.on_fullmatch('校验全部Cookies') @sv.on_fullmatch('校验全部Cookies')
async def _(bot:HoshinoBot, ev: CQEvent): async def check_cookies(bot: HoshinoBot, ev: CQEvent):
try: try:
raw_mes = await CheckDB() raw_mes = await check_db()
im = raw_mes[0] im = raw_mes[0]
await bot.send(ev, im) await bot.send(ev, im)
for i in raw_mes[1]: for i in raw_mes[1]:
await bot.send_private_msg(user_id=i[0], await bot.send_private_msg(user_id=i[0],
message = "您绑定的Cookiesuid{})已失效,以下功能将会受到影响:\n查看完整信息列表\n查看深渊配队\n自动签到/当前状态/每月统计\n请及时重新绑定Cookies并重新开关相应功能。".format(i[1])) message="您绑定的Cookiesuid{})已失效,以下功能将会受到影响:\n查看完整信息列表\n"
"查看深渊配队\n自动签到/当前状态/每月统计\n"
"请及时重新绑定Cookies并重新开关相应功能。".format(i[1]))
await asyncio.sleep(3 + random.randint(1, 3)) await asyncio.sleep(3 + random.randint(1, 3))
except ActionFailed as e:
await bot.send(ev, "机器人发送消息失败:{}".format(e))
logger.exception("发送Cookie校验信息失败")
except Exception as e: except Exception as e:
traceback.print_exc()
await bot.send(ev, "发生错误 {},请检查后台输出。".format(e)) await bot.send(ev, "发生错误 {},请检查后台输出。".format(e))
logger.exception("Cookie校验错误")
# 群聊内 查询当前树脂状态以及派遣状态 的命令 # 群聊内 查询当前树脂状态以及派遣状态 的命令
@sv.on_fullmatch('当前状态') @sv.on_fullmatch('当前状态')
async def _(bot:HoshinoBot, ev: CQEvent): async def send_daily_data(bot: HoshinoBot, ev: CQEvent):
try: try:
uid = await selectDB(ev.sender['user_id'],mode = "uid") uid = await select_db(ev.sender['user_id'], mode="uid")
uid = uid[0] uid = uid[0]
mes = await daily("ask", uid) mes = await daily("ask", uid)
im = mes[0]['message'] im = mes[0]['message']
except Exception as e: except Exception:
traceback.print_exc()
im = "没有找到绑定信息。" im = "没有找到绑定信息。"
logger.exception("获取当前状态失败")
try:
await bot.send(ev, im, at_sender=True) await bot.send(ev, im, at_sender=True)
except ActionFailed as e:
await bot.send(ev, "机器人发送消息失败:{}".format(e))
logger.exception("发送当前状态信息失败")
# 群聊内 查询uid 的命令 # 群聊内 查询uid 的命令
@sv.on_prefix('uid') @sv.on_prefix('uid')
async def _(bot:HoshinoBot, ev: CQEvent): async def send_uid_info(bot: HoshinoBot, ev: CQEvent):
try: try:
image = re.search(r"\[CQ:image,file=(.*),url=(.*)\]", str(ev.message)) image = re.search(r"\[CQ:image,file=(.*),url=(.*)]", str(ev.message))
message = ev.message.extract_plain_text() message = ev.message.extract_plain_text()
uid = re.findall(r"\d+", message)[0] # str uid = re.findall(r"\d+", message)[0] # str
m = ''.join(re.findall('[\u4e00-\u9fa5]', message)) m = ''.join(re.findall('[\u4e00-\u9fa5]', message))
@ -493,12 +595,15 @@ async def _(bot:HoshinoBot, ev: CQEvent):
else: else:
im = await draw_abyss0_pic(uid, ev.sender['nickname'], image) im = await draw_abyss0_pic(uid, ev.sender['nickname'], image)
await bot.send(ev, im, at_sender=True) await bot.send(ev, im, at_sender=True)
except ActionFailed as e:
await bot.send(ev, "机器人发送消息失败:{}".format(e))
logger.exception("发送uid深渊信息失败")
except TypeError: except TypeError:
await bot.send("获取失败可能是Cookies失效或者未打开米游社角色详情开关。") await bot.send(ev, "获取失败可能是Cookies失效或者未打开米游社角色详情开关。")
traceback.print_exc() logger.exception("深渊数据获取失败Cookie失效/不公开信息)")
except Exception as e: except Exception as e:
await bot.send("获取失败,有可能是数据状态有问题,\n{}\n请检查后台输出。".format(e)) await bot.send(ev, "获取失败,有可能是数据状态有问题,\n{}\n请检查后台输出。".format(e))
traceback.print_exc() logger.exception("深渊数据获取失败(数据状态问题)")
elif m == "上期深渊": elif m == "上期深渊":
try: try:
if len(re.findall(r"\d+", message)) == 2: if len(re.findall(r"\d+", message)) == 2:
@ -508,65 +613,80 @@ async def _(bot:HoshinoBot, ev: CQEvent):
else: else:
im = await draw_abyss0_pic(uid, ev.sender['nickname'], image, 2, "2") im = await draw_abyss0_pic(uid, ev.sender['nickname'], image, 2, "2")
await bot.send(ev, im, at_sender=True) await bot.send(ev, im, at_sender=True)
except ActionFailed as e:
await bot.send(ev, "机器人发送消息失败:{}".format(e))
logger.exception("发送uid上期深渊信息失败")
except TypeError: except TypeError:
await bot.send("获取失败可能是Cookies失效或者未打开米游社角色详情开关。") await bot.send(ev, "获取失败可能是Cookies失效或者未打开米游社角色详情开关。")
traceback.print_exc() logger.exception("上期深渊数据获取失败Cookie失效/不公开信息)")
except Exception as e: except Exception as e:
await bot.send("获取失败,有可能是数据状态有问题,\n{}\n请检查后台输出。".format(e)) await bot.send(ev, "获取失败,有可能是数据状态有问题,\n{}\n请检查后台输出。".format(e))
traceback.print_exc() logger.exception("上期深渊数据获取失败(数据状态问题)")
else: else:
try: try:
im = await draw_pic(uid, ev.sender['nickname'], image, 2) im = await draw_pic(uid, ev.sender['nickname'], image, 2)
await bot.send(ev, im, at_sender=True) await bot.send(ev, im, at_sender=True)
except ActionFailed as e:
await bot.send(ev, "机器人发送消息失败:{}".format(e))
logger.exception("发送uid信息失败")
except TypeError: except TypeError:
await bot.send("获取失败可能是Cookies失效或者未打开米游社角色详情开关。") await bot.send(ev, "获取失败可能是Cookies失效或者未打开米游社角色详情开关。")
traceback.print_exc() logger.exception("数据获取失败Cookie失效/不公开信息)")
except Exception as e: except Exception as e:
await bot.send("获取失败,有可能是数据状态有问题,\n{}\n请检查后台输出。".format(e)) await bot.send(ev, "获取失败,有可能是数据状态有问题,\n{}\n请检查后台输出。".format(e))
traceback.print_exc() logger.exception("数据获取失败(数据状态问题)")
except Exception as e: except Exception as e:
traceback.print_exc()
await bot.send(ev, "发生错误 {},请检查后台输出。".format(e)) await bot.send(ev, "发生错误 {},请检查后台输出。".format(e))
logger.exception("uid查询异常")
# 群聊内 绑定uid 的命令会绑定至当前qq号上 # 群聊内 绑定uid 的命令会绑定至当前qq号上
@sv.on_prefix('绑定uid') @sv.on_prefix('绑定uid')
async def _(bot:HoshinoBot, ev: CQEvent): async def link_uid_to_qq(bot: HoshinoBot, ev: CQEvent):
try: try:
message = ev.message.extract_plain_text() message = ev.message.extract_plain_text()
uid = re.findall(r"\d+", message)[0] # str uid = re.findall(r"\d+", message)[0] # str
await connectDB(ev.sender['user_id'],uid) await connect_db(ev.sender['user_id'], uid)
await bot.send(ev, '绑定uid成功', at_sender=True) await bot.send(ev, '绑定uid成功', at_sender=True)
except ActionFailed as e:
await bot.send(ev, "机器人发送消息失败:{}".format(e))
logger.exception("发送绑定信息失败")
except Exception as e: except Exception as e:
traceback.print_exc()
await bot.send(ev, "发生错误 {},请检查后台输出。".format(e)) await bot.send(ev, "发生错误 {},请检查后台输出。".format(e))
logger.exception("绑定uid异常")
# 群聊内 绑定米游社通行证 的命令会绑定至当前qq号上和绑定uid不冲突两者可以同时绑定 # 群聊内 绑定米游社通行证 的命令会绑定至当前qq号上和绑定uid不冲突两者可以同时绑定
@sv.on_prefix('绑定mys') @sv.on_prefix('绑定mys')
async def _(bot:HoshinoBot, ev: CQEvent): async def link_mihoyo_bbs_to_qq(bot: HoshinoBot, ev: CQEvent):
try: try:
message = ev.message.extract_plain_text() message = ev.message.extract_plain_text()
mys = re.findall(r"\d+", message)[0] # str mys = re.findall(r"\d+", message)[0] # str
await connectDB(ev.sender['user_id'],None,mys) await connect_db(ev.sender['user_id'], None, mys)
await bot.send(ev, '绑定米游社id成功', at_sender=True) await bot.send(ev, '绑定米游社id成功', at_sender=True)
except ActionFailed as e:
await bot.send(ev, "机器人发送消息失败:{}".format(e))
logger.exception("发送绑定信息失败")
except Exception as e: except Exception as e:
traceback.print_exc()
await bot.send(ev, "发生错误 {},请检查后台输出。".format(e)) await bot.send(ev, "发生错误 {},请检查后台输出。".format(e))
logger.exception("绑定米游社通行证异常")
# 群聊内 绑定过uid/mysid的情况下可以查询默认优先调用米游社通行证多出世界等级一个参数 # 群聊内 绑定过uid/mysid的情况下可以查询默认优先调用米游社通行证多出世界等级一个参数
@sv.on_prefix('查询') @sv.on_prefix('查询')
async def _(bot, ev): async def get_info(bot, ev):
try: try:
image = re.search(r"\[CQ:image,file=(.*),url=(.*)\]", str(ev.message)) image = re.search(r"\[CQ:image,file=(.*),url=(.*)]", str(ev.message))
at = re.search(r"\[CQ:at,qq=(\d*)\]", str(ev.raw_message.strip())) at = re.search(r"\[CQ:at,qq=(\d*)]", str(ev.raw_message.strip()))
message = ev.message.extract_plain_text() message = ev.message.extract_plain_text()
if at: if at:
qid = at.group(1) qid = at.group(1)
mi = await bot.get_group_member_info(group_id=ev.group_id, user_id=qid) mi = await bot.get_group_member_info(group_id=ev.group_id, user_id=qid)
nickname = mi["nickname"] nickname = mi["nickname"]
uid = await selectDB(qid) uid = await select_db(qid)
else: else:
nickname = ev.sender['nickname'] nickname = ev.sender['nickname']
uid = await selectDB(ev.sender['user_id']) uid = await select_db(ev.sender['user_id'])
m = ''.join(re.findall('[\u4e00-\u9fa5]', message)) m = ''.join(re.findall('[\u4e00-\u9fa5]', message))
if uid: if uid:
@ -579,12 +699,15 @@ async def _(bot, ev):
else: else:
im = await draw_abyss0_pic(uid[0], nickname, image, uid[1]) im = await draw_abyss0_pic(uid[0], nickname, image, uid[1])
await bot.send(ev, im, at_sender=True) await bot.send(ev, im, at_sender=True)
except ActionFailed as e:
await bot.send(ev, "机器人发送消息失败:{}".format(e))
logger.exception("发送uid深渊信息失败")
except TypeError: except TypeError:
await bot.send("获取失败可能是Cookies失效或者未打开米游社角色详情开关。") await bot.send(ev, "获取失败可能是Cookies失效或者未打开米游社角色详情开关。")
traceback.print_exc() logger.exception("深渊数据获取失败Cookie失效/不公开信息)")
except Exception as e: except Exception as e:
await bot.send("获取失败,有可能是数据状态有问题,\n{}\n请检查后台输出。".format(e)) await bot.send(ev, "获取失败,有可能是数据状态有问题,\n{}\n请检查后台输出。".format(e))
traceback.print_exc() logger.exception("深渊数据获取失败(数据状态问题)")
elif m == "上期深渊": elif m == "上期深渊":
try: try:
if len(re.findall(r"\d+", message)) == 1: if len(re.findall(r"\d+", message)) == 1:
@ -594,45 +717,55 @@ async def _(bot, ev):
else: else:
im = await draw_abyss0_pic(uid[0], nickname, image, uid[1], "2") im = await draw_abyss0_pic(uid[0], nickname, image, uid[1], "2")
await bot.send(ev, im, at_sender=True) await bot.send(ev, im, at_sender=True)
except ActionFailed as e:
await bot.send(ev, "机器人发送消息失败:{}".format(e))
logger.exception("发送uid上期深渊信息失败")
except TypeError: except TypeError:
await bot.send("获取失败可能是Cookies失效或者未打开米游社角色详情开关。") await bot.send(ev, "获取失败可能是Cookies失效或者未打开米游社角色详情开关。")
traceback.print_exc() logger.exception("上期深渊数据获取失败Cookie失效/不公开信息)")
except Exception as e: except Exception as e:
await bot.send("获取失败,有可能是数据状态有问题,\n{}\n请检查后台输出。".format(e)) await bot.send(ev, "获取失败,有可能是数据状态有问题,\n{}\n请检查后台输出。".format(e))
traceback.print_exc() logger.exception("上期深渊数据获取失败(数据状态问题)")
elif m == "词云": elif m == "词云":
try: try:
im = await draw_wordcloud(uid[0],image,uid[1]) im = await draw_word_cloud(uid[0], image, uid[1])
await bot.send(ev, im, at_sender=True) await bot.send(ev, im, at_sender=True)
except ActionFailed as e:
await bot.send(ev, "机器人发送消息失败:{}".format(e))
logger.exception("发送uid词云信息失败")
except TypeError: except TypeError:
await bot.send("获取失败可能是Cookies失效或者未打开米游社角色详情开关。") await bot.send(ev, "获取失败可能是Cookies失效或者未打开米游社角色详情开关。")
traceback.print_exc() logger.exception("词云数据获取失败Cookie失效/不公开信息)")
except Exception as e: except Exception as e:
await bot.send("获取失败,有可能是数据状态有问题,\n{}\n请检查后台输出。".format(e)) await bot.send(ev, "获取失败,有可能是数据状态有问题,\n{}\n请检查后台输出。".format(e))
traceback.print_exc() logger.exception("词云数据获取失败(数据状态问题)")
elif m == "": elif m == "":
try: try:
bg = await draw_pic(uid[0], nickname, image, uid[1]) bg = await draw_pic(uid[0], nickname, image, uid[1])
await bot.send(ev, bg, at_sender=True) await bot.send(ev, bg, at_sender=True)
except ActionFailed as e:
await bot.send(ev, "机器人发送消息失败:{}".format(e))
logger.exception("发送uid信息失败")
except TypeError: except TypeError:
await bot.send("获取失败可能是Cookies失效或者未打开米游社角色详情开关。") await bot.send(ev, "获取失败可能是Cookies失效或者未打开米游社角色详情开关。")
traceback.print_exc() logger.exception("数据获取失败Cookie失效/不公开信息)")
except Exception as e: except Exception as e:
await bot.send("获取失败,有可能是数据状态有问题,\n{}\n请检查后台输出。".format(e)) await bot.send(ev, "获取失败,有可能是数据状态有问题,\n{}\n请检查后台输出。".format(e))
traceback.print_exc() logger.exception("数据获取失败(数据状态问题)")
else: else:
pass pass
else: else:
await bot.send(ev, '未找到绑定记录!') await bot.send(ev, '未找到绑定记录!')
except Exception as e: except Exception as e:
traceback.print_exc()
await bot.send(ev, "发生错误 {},请检查后台输出。".format(e)) await bot.send(ev, "发生错误 {},请检查后台输出。".format(e))
logger.exception("查询异常")
# 群聊内 查询米游社通行证 的命令 # 群聊内 查询米游社通行证 的命令
@sv.on_prefix('mys') @sv.on_prefix('mys')
async def _(bot:HoshinoBot, ev: CQEvent): async def send_mihoyo_bbs_info(bot: HoshinoBot, ev: CQEvent):
try: try:
image = re.search(r"\[CQ:image,file=(.*),url=(.*)\]", str(ev.message)) image = re.search(r"\[CQ:image,file=(.*),url=(.*)]", str(ev.message))
message = ev.message.extract_plain_text() message = ev.message.extract_plain_text()
uid = re.findall(r"\d+", message)[0] # str uid = re.findall(r"\d+", message)[0] # str
m = ''.join(re.findall('[\u4e00-\u9fa5]', message)) m = ''.join(re.findall('[\u4e00-\u9fa5]', message))
@ -645,12 +778,15 @@ async def _(bot:HoshinoBot, ev: CQEvent):
else: else:
im = await draw_abyss0_pic(uid, ev.sender['nickname'], image, 3) im = await draw_abyss0_pic(uid, ev.sender['nickname'], image, 3)
await bot.send(ev, im, at_sender=True) await bot.send(ev, im, at_sender=True)
except ActionFailed as e:
await bot.send(ev, "机器人发送消息失败:{}".format(e))
logger.exception("发送米游社深渊信息失败")
except TypeError: except TypeError:
await bot.send("获取失败可能是Cookies失效或者未打开米游社角色详情开关。") await bot.send(ev, "获取失败可能是Cookies失效或者未打开米游社角色详情开关。")
traceback.print_exc() logger.exception("深渊数据获取失败Cookie失效/不公开信息)")
except Exception as e: except Exception as e:
await bot.send("获取失败,有可能是数据状态有问题,\n{}\n请检查后台输出。".format(e)) await bot.send(ev, "获取失败,有可能是数据状态有问题,\n{}\n请检查后台输出。".format(e))
traceback.print_exc() logger.exception("深渊数据获取失败(数据状态问题)")
elif m == "上期深渊": elif m == "上期深渊":
try: try:
if len(re.findall(r"\d+", message)) == 1: if len(re.findall(r"\d+", message)) == 1:
@ -660,22 +796,28 @@ async def _(bot:HoshinoBot, ev: CQEvent):
else: else:
im = await draw_abyss0_pic(uid, ev.sender['nickname'], image, 3, "2") im = await draw_abyss0_pic(uid, ev.sender['nickname'], image, 3, "2")
await bot.send(ev, im, at_sender=True) await bot.send(ev, im, at_sender=True)
except ActionFailed as e:
await bot.send(ev, "机器人发送消息失败:{}".format(e))
logger.exception("发送米游社上期深渊信息失败")
except TypeError: except TypeError:
await bot.send("获取失败可能是Cookies失效或者未打开米游社角色详情开关。") await bot.send(ev, "获取失败可能是Cookies失效或者未打开米游社角色详情开关。")
traceback.print_exc() logger.exception("上期深渊数据获取失败Cookie失效/不公开信息)")
except Exception as e: except Exception as e:
await bot.send("获取失败,有可能是数据状态有问题,\n{}\n请检查后台输出。".format(e)) await bot.send(ev, "获取失败,有可能是数据状态有问题,\n{}\n请检查后台输出。".format(e))
traceback.print_exc() logger.exception("上期深渊数据获取失败(数据状态问题)")
else: else:
try: try:
im = await draw_pic(uid, ev.sender['nickname'], image, 3) im = await draw_pic(uid, ev.sender['nickname'], image, 3)
await bot.send(ev, im, at_sender=True) await bot.send(ev, im, at_sender=True)
except ActionFailed as e:
await bot.send(ev, "机器人发送消息失败:{}".format(e))
logger.exception("发送米游社信息失败")
except TypeError: except TypeError:
await bot.send("获取失败可能是Cookies失效或者未打开米游社角色详情开关。") await bot.send(ev, "获取失败可能是Cookies失效或者未打开米游社角色详情开关。")
traceback.print_exc() logger.exception("米游社数据获取失败Cookie失效/不公开信息)")
except Exception as e: except Exception as e:
await bot.send("获取失败,有可能是数据状态有问题,\n{}\n请检查后台输出。".format(e)) await bot.send(ev, "获取失败,有可能是数据状态有问题,\n{}\n请检查后台输出。".format(e))
traceback.print_exc() logger.exception("米游社数据获取失败(数据状态问题)")
except Exception as e: except Exception as e:
traceback.print_exc()
await bot.send(ev, "发生错误 {},请检查后台输出。".format(e)) await bot.send(ev, "发生错误 {},请检查后台输出。".format(e))
logger.exception("米游社查询异常")

View File

@ -10,7 +10,6 @@ from re import findall
import numpy as np import numpy as np
from PIL import Image, ImageDraw, ImageFont, ImageFilter from PIL import Image, ImageDraw, ImageFont, ImageFilter
from httpx import get from httpx import get
from nonebot.adapters.onebot.v11 import Message
from wordcloud import WordCloud from wordcloud import WordCloud
from .get_data import get_info, get_character, get_spiral_abyss_info, get_mihoyo_bbs_info, \ from .get_data import get_info, get_character, get_spiral_abyss_info, get_mihoyo_bbs_info, \
@ -652,7 +651,7 @@ async def draw_abyss0_pic(uid, nickname, image=None, mode=2, date="1"):
bg_img.save(result_buffer, format='JPEG', subsampling=0, quality=90) bg_img.save(result_buffer, format='JPEG', subsampling=0, quality=90)
# bg_img.save(result_buffer, format='PNG') # bg_img.save(result_buffer, format='PNG')
imgmes = 'base64://' + b64encode(result_buffer.getvalue()).decode() imgmes = 'base64://' + b64encode(result_buffer.getvalue()).decode()
resultmes = Message(f"[CQ:image,file={imgmes}]") resultmes = f"[CQ:image,file={imgmes}]"
return resultmes return resultmes
@ -848,7 +847,7 @@ async def draw_abyss_pic(uid, nickname, floor_num, image=None, mode=2, date="1")
bg_img.save(result_buffer, format='JPEG', subsampling=0, quality=90) bg_img.save(result_buffer, format='JPEG', subsampling=0, quality=90)
# bg_img.save(result_buffer, format='PNG') # bg_img.save(result_buffer, format='PNG')
imgmes = 'base64://' + b64encode(result_buffer.getvalue()).decode() imgmes = 'base64://' + b64encode(result_buffer.getvalue()).decode()
resultmes = Message(f"[CQ:image,file={imgmes}]") resultmes = f"[CQ:image,file={imgmes}]"
return resultmes return resultmes

View File

@ -1,5 +1,6 @@
nonebot==1.8.2 nonebot~=1.6.0
requests==2.25.1 requests==2.25.1
httpx==0.18.1 httpx==0.18.1
Pillow>=8.3.1 Pillow>=8.3.1
wordcloud>=1.8.1 wordcloud>=1.8.1
numpy~=1.22.2