diff --git a/LittlePaimon/plugins/Paimon_Autobbs/coin_handle.py b/LittlePaimon/plugins/Paimon_Autobbs/coin_handle.py index 8a41e10..ea79652 100644 --- a/LittlePaimon/plugins/Paimon_Autobbs/coin_handle.py +++ b/LittlePaimon/plugins/Paimon_Autobbs/coin_handle.py @@ -3,7 +3,9 @@ import datetime import random import time from collections import defaultdict +from typing import Tuple +from nonebot import get_bot from LittlePaimon.database.models import PrivateCookie, MihoyoBBSSub, LastQuery from LittlePaimon.utils import logger, aiorequests from LittlePaimon.utils import scheduler @@ -57,6 +59,12 @@ mihoyo_bbs_List = [ 'name': '崩坏:星穹铁道', 'url': 'https://bbs.mihoyo.com/sr/', }, + { + 'id': '8', + 'forumId': '57', + 'name': '绝区零', + 'url': 'https://bbs.mihoyo.com/zzz/' + } ] @@ -96,7 +104,7 @@ class MihoyoBBSCoin: self.is_valid: bool = True self.state: str = '' - async def run(self) -> (bool, str): + async def run(self) -> Tuple[bool, str]: """ 执行米游币获取任务 :return: 获取消息 @@ -304,14 +312,40 @@ async def bbs_auto_coin(): if not subs: return logger.info('米游币自动获取', f'开始执行米游币自动获取,共{len(subs)}个任务,预计花费{round(75 * len(subs) / 60, 2)}分钟') - coin_result = defaultdict(list) + coin_result_group = defaultdict(list) + coin_result_private = defaultdict(list) for sub in subs: result = await mhy_bbs_coin(str(sub.user_id), sub.uid) - coin_result[sub.group_id].append({ - 'user_id': sub.user_id, - 'uid': sub.uid, - 'result': '出错' not in result and 'Cookie' not in result - }) + if sub.user_id != sub.group_id: + coin_result_group[sub.group_id].append({ + 'user_id': sub.user_id, + 'uid': sub.uid, + 'result': '出错' not in result and 'Cookie' not in result + }) + else: + coin_result_private[sub.user_id].append({ + 'uid': sub.uid, + 'result': '出错' not in result and 'Cookie' not in result, + 'msg': result + }) await asyncio.sleep(random.randint(3, 6)) - logger.info('米游币自动获取', f'签到完成,共花费{round((time.time() - t) / 60, 2)}分钟') + for group_id, result_list in coin_result_group.items(): + result_num = len(result_list) + result_fail = len([result for result in result_list if not result['result']]) + msg = f'本群米游币自动获取共{result_num}个任务,其中成功{result_num-result_fail}个,失败{result_fail}个,失败的UID列表:\n{"\n".join(result["uid"] for result in result_list if not result["result"])}' + try: + await get_bot().send_group_msg(group_id=int(group_id), message=msg) + except Exception as e: + logger.info('米游币自动获取', '➤➤', {'群': group_id}, f'发送米游币自动结果失败: {e}', False) + await asyncio.sleep(random.randint(3, 6)) + + for user_id, result_list in coin_result_private.items(): + for result in result_list: + try: + await get_bot().send_private_msg(user_id=int(user_id), message=result['msg']) + except Exception as e: + logger.info('米游币自动获取', '➤➤', {'用户': user_id}, f'发送米游币自动结果失败: {e}', False) + await asyncio.sleep(random.randint(3, 6)) + + logger.info('米游币自动获取', f'获取完成,共花费{round((time.time() - t) / 60, 2)}分钟') diff --git a/LittlePaimon/plugins/Paimon_Autobbs/sign_handle.py b/LittlePaimon/plugins/Paimon_Autobbs/sign_handle.py index db93858..a496456 100644 --- a/LittlePaimon/plugins/Paimon_Autobbs/sign_handle.py +++ b/LittlePaimon/plugins/Paimon_Autobbs/sign_handle.py @@ -105,6 +105,7 @@ async def bbs_auto_sign(): await get_bot().send_group_msg(group_id=int(group_id), message=img) except Exception as e: logger.info('米游社原神签到', '➤➤', {'群': group_id}, f'发送签到结果失败: {e}', False) + await asyncio.sleep(random.randint(3, 6)) for user_id, sign_result in sign_result_private.items(): for result in sign_result: @@ -115,6 +116,7 @@ async def bbs_auto_sign(): f'{"" if result["result"] == SignResult.FAIL else ",获得奖励:" + result["reward"]}') except Exception as e: logger.info('米游社原神签到', '➤➤', {'用户': user_id}, f'发送签到结果失败: {e}', False) + await asyncio.sleep(random.randint(3, 6)) logger.info('米游社原神签到', f'签到完成,共花费{round((time.time() - t) / 60, 2)}分钟') diff --git a/LittlePaimon/plugins/Paimon_DailyNote/handler.py b/LittlePaimon/plugins/Paimon_DailyNote/handler.py index f93f4c3..836703a 100644 --- a/LittlePaimon/plugins/Paimon_DailyNote/handler.py +++ b/LittlePaimon/plugins/Paimon_DailyNote/handler.py @@ -115,6 +115,8 @@ async def check_note(): result_log += '银币' if result_log: logger.info('原神实时便签', '➤', {'用户': sub.user_id, 'UID': sub.uid}, f'{result_log}达到了阈值,发送提醒', True) + else: + logger.info('原神实时便签', '➤➤', {'用户': sub.user_id, 'UID': sub.uid}, '检查完成,未达到阈值', True) if result: sub.last_remind_time = datetime.datetime.now() sub.today_remind_num += 1 @@ -128,8 +130,8 @@ async def check_note(): message=f'⚠️你的UID{sub.uid}{result}记得清理哦⚠️') except Exception as e: logger.info('原神实时便签', '➤➤', {'用户': sub.user_id, 'UID': sub.uid}, f'发送提醒失败,{e}', False) - # 等待2至4秒再检查下一个,防止检查过快 - await asyncio.sleep(random.randint(2, 4)) + # 等待一会再检查下一个,防止检查过快 + await asyncio.sleep(random.randint(4, 8)) logger.info('原神实时便签', f'树脂检查完成,共花费{round((time.time() - t) / 60, 2)}分钟') diff --git a/LittlePaimon/plugins/Paimon_Gacha_Log/draw.py b/LittlePaimon/plugins/Paimon_Gacha_Log/draw.py index df385bd..f1ea4c1 100644 --- a/LittlePaimon/plugins/Paimon_Gacha_Log/draw.py +++ b/LittlePaimon/plugins/Paimon_Gacha_Log/draw.py @@ -172,20 +172,20 @@ async def draw_gacha_log(user_id: str, uid: str, nickname: Optional[str], signat await img.text(str(total_five_star_count), (789, 884), 286, fm.get('bahnschrift_regular', 48), '#040404', 'center') four_star_detail = await draw_four_star_detail(list(data4.values())) if total_five_star_count: - chara_pool_per = round(len(data5['角色祈愿']) / total_five_star_count, 3) - weapon_pool_per = round(len(data5['武器祈愿']) / total_five_star_count, 3) - new_pool_per = round((len(data5['常驻祈愿']) + len(data5['新手祈愿'])) / total_five_star_count, 3) + chara_pool_per = round(len(data5['角色祈愿']) / total_five_star_count * 100, 3) + weapon_pool_per = round(len(data5['武器祈愿']) / total_five_star_count * 100, 3) + new_pool_per = round((len(data5['常驻祈愿']) + len(data5['新手祈愿'])) / total_five_star_count * 100, 3) now_used_width = 56 pers = [chara_pool_per, weapon_pool_per, new_pool_per] i = 0 for per in pers: - if per >= 0.03: - await img.draw_rectangle((now_used_width, 399, now_used_width + int(per * 967), 446), + if per >= 3: + await img.draw_rectangle((now_used_width, 399, now_used_width + int(per / 100 * 967), 446), bar_color[i][0]) - if per >= 0.1: - await img.text(f'{per * 100}%', now_used_width + 18, 410, fm.get('bahnschrift_regular', 30, 'Bold'), + if per >= 10: + await img.text(f'{per}%', now_used_width + 18, 410, fm.get('bahnschrift_regular', 30, 'Bold'), bar_color[i][1]) - now_used_width += int(per * 967) + now_used_width += int(per / 100 * 967) i += 1 await img.paste(await load_image(RESOURCE_BASE_PATH / 'gacha_log' / 'text.png'), (484, 464)) now_height = 525