LittlePaimon/Paimon_Chat/__init__.py
2022-06-16 20:55:08 +08:00

91 lines
3.2 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import random
from nonebot import on_regex, on_command, logger
from nonebot.matcher import matchers
from nonebot.rule import Rule
from nonebot import get_driver
from nonebot.adapters.onebot.v11 import Bot, MessageEvent, GroupMessageEvent, MessageSegment
from nonebot.exception import FinishedException
from utils.config import config
from utils.auth_util import FreqLimiter2
from utils.message_util import MessageBuild
from utils.file_handler import load_json_from_url
__paimon_help__ = {
'type': '派蒙机器学习',
'range': ['private', 'group', 'guild']
}
if config.paimon_mongodb_url:
try:
from .Learning_repeate import main
except ImportError:
logger.info('派蒙机器学习聊天启用失败可能是mongodb连接失败或缺少相关库')
else:
logger.info('派蒙机器学习聊天启用失败mongodb尚未配置')
driver = get_driver()
voice_url = 'https://static.cherishmoon.fun/LittlePaimon/voice/'
chat_lmt = FreqLimiter2(60)
update_voice = on_command('更新派蒙语音', priority=2)
# TODO 被动效果
def check_group(event: GroupMessageEvent) -> bool:
if event.group_id in config.paimon_chat_group:
return True
return False
@update_voice.handle()
async def update_paimon_voice(event: MessageEvent):
try:
old_len = len([m for m in matchers[10] if m.plugin_name == 'Paimon_Chat'])
voice_list = await load_json_from_url('https://static.cherishmoon.fun/LittlePaimon/voice/voice_list.json')
matchers[10] = [m for m in matchers[10] if m.plugin_name != 'Paimon_Chat']
for key, value in voice_list.items():
create_matcher(key, value['pattern'], value['cooldown'], value['pro'], value['files'])
new_len = len(voice_list) - old_len
await update_voice.send(f'派蒙语音更新成功,本次获取到{len(voice_list)}种语音, 新增{new_len}种语音')
except FinishedException:
raise
except Exception as e:
await update_voice.send(f'派蒙语音更新失败:{e}')
def create_matcher(chat_word: str, pattern: str, cooldown: int, pro: float, responses):
def check_pro() -> bool:
return random.random() < pro
def check_cooldown(event: GroupMessageEvent) -> bool:
return chat_lmt.check(event.group_id, chat_word)
hammer = on_regex(pattern, priority=10, rule=Rule(check_group, check_pro, check_cooldown))
hammer.plugin_name = 'Paimon_Chat'
@hammer.handle()
async def handler(event: GroupMessageEvent):
try:
chat_lmt.start_cd(event.group_id, chat_word, cooldown)
response = random.choice(responses)
if '.mp3' not in response:
await hammer.finish(response)
else:
await hammer.finish(await MessageBuild.StaticRecord(url=f'LittlePaimon/voice/{response}'))
except FinishedException:
raise
except Exception as e:
logger.error('派蒙发送语音失败', e)
@driver.on_startup
async def load_voice():
voice_list = await load_json_from_url('https://static.cherishmoon.fun/LittlePaimon/voice/voice_list.json')
for k, v in voice_list.items():
create_matcher(k, v['pattern'], v['cooldown'], v['pro'], v['files'])