2021-11-23 21:44:59 +08:00
|
|
|
|
from utils.manager import StaticData
|
|
|
|
|
|
from configs.config import NICKNAME
|
|
|
|
|
|
from models.ban_user import BanUser
|
|
|
|
|
|
from typing import Optional
|
|
|
|
|
|
import random
|
|
|
|
|
|
import time
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class AiMessageManager(StaticData):
|
|
|
|
|
|
def __init__(self):
|
|
|
|
|
|
super().__init__(None)
|
|
|
|
|
|
self._same_message = [
|
|
|
|
|
|
"为什么要发一样的话?",
|
|
|
|
|
|
"请不要再重复对我说一句话了,不然我就要生气了!",
|
|
|
|
|
|
"别再发这句话了,我已经知道了...",
|
|
|
|
|
|
"你是只会说这一句话吗?",
|
|
|
|
|
|
"[*],你发我也发!",
|
|
|
|
|
|
"[uname],[*]",
|
|
|
|
|
|
f"救命!有笨蛋一直给{NICKNAME}发一样的话!",
|
|
|
|
|
|
"这句话你已经给我发了{}次了,再发就生气!",
|
|
|
|
|
|
]
|
|
|
|
|
|
self._repeat_message = [
|
|
|
|
|
|
f"请不要学{NICKNAME}说话",
|
|
|
|
|
|
f"为什么要一直学{NICKNAME}说话?",
|
|
|
|
|
|
"你再学!你再学我就生气了!",
|
|
|
|
|
|
f"呜呜,你是想欺负{NICKNAME}嘛..",
|
|
|
|
|
|
"[uname]不要再学我说话了!",
|
|
|
|
|
|
"再学我说话,我就把你拉进黑名单(生气",
|
|
|
|
|
|
"你再学![uname]是个笨蛋!",
|
|
|
|
|
|
"你已经学我说话{}次了!别再学了!",
|
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
|
|
def add_message(self, user_id: int, message: str):
|
|
|
|
|
|
"""
|
|
|
|
|
|
添加用户消息
|
|
|
|
|
|
:param user_id: 用户id
|
|
|
|
|
|
:param message: 消息内容
|
|
|
|
|
|
"""
|
|
|
|
|
|
if message:
|
|
|
|
|
|
if self._data.get(user_id) is None:
|
|
|
|
|
|
self._data[user_id] = {
|
|
|
|
|
|
"time": time.time(),
|
|
|
|
|
|
"message": [],
|
|
|
|
|
|
"result": [],
|
|
|
|
|
|
"repeat_count": 0,
|
|
|
|
|
|
}
|
|
|
|
|
|
if time.time() - self._data[user_id]["time"] > 60 * 10:
|
|
|
|
|
|
self._data[user_id]["message"].clear()
|
|
|
|
|
|
self._data[user_id]["time"] = time.time()
|
|
|
|
|
|
self._data[user_id]["message"].append(message.strip())
|
|
|
|
|
|
|
|
|
|
|
|
def add_result(self, user_id: int, message: str):
|
|
|
|
|
|
"""
|
|
|
|
|
|
添加回复用户的消息
|
|
|
|
|
|
:param user_id: 用户id
|
|
|
|
|
|
:param message: 回复消息内容
|
|
|
|
|
|
"""
|
|
|
|
|
|
if message:
|
|
|
|
|
|
if self._data.get(user_id) is None:
|
|
|
|
|
|
self._data[user_id] = {
|
|
|
|
|
|
"time": time.time(),
|
|
|
|
|
|
"message": [],
|
|
|
|
|
|
"result": [],
|
|
|
|
|
|
"repeat_count": 0,
|
|
|
|
|
|
}
|
|
|
|
|
|
if time.time() - self._data[user_id]["time"] > 60 * 10:
|
|
|
|
|
|
self._data[user_id]["result"].clear()
|
|
|
|
|
|
self._data[user_id]["repeat_count"] = 0
|
|
|
|
|
|
self._data[user_id]["time"] = time.time()
|
|
|
|
|
|
self._data[user_id]["result"].append(message.strip())
|
|
|
|
|
|
|
|
|
|
|
|
async def get_result(self, user_id: int, nickname: str) -> Optional[str]:
|
|
|
|
|
|
"""
|
|
|
|
|
|
特殊消息特殊回复
|
|
|
|
|
|
:param user_id: 用户id
|
|
|
|
|
|
:param nickname: 用户昵称
|
|
|
|
|
|
"""
|
2021-12-16 11:16:28 +08:00
|
|
|
|
try:
|
|
|
|
|
|
if len(self._data[user_id]["message"]) < 2:
|
|
|
|
|
|
return None
|
|
|
|
|
|
except KeyError:
|
2021-11-23 21:44:59 +08:00
|
|
|
|
return None
|
|
|
|
|
|
msg = await self._get_user_repeat_message_result(user_id)
|
|
|
|
|
|
if not msg:
|
|
|
|
|
|
msg = await self._get_user_same_message_result(user_id)
|
|
|
|
|
|
if msg:
|
|
|
|
|
|
if "[uname]" in msg:
|
|
|
|
|
|
msg = msg.replace("[uname]", nickname)
|
|
|
|
|
|
if not msg.startswith("生气了!你好烦,闭嘴!") and "[*]" in msg:
|
|
|
|
|
|
msg = msg.replace("[*]", self._data[user_id]["message"][-1])
|
|
|
|
|
|
return msg
|
|
|
|
|
|
|
|
|
|
|
|
async def _get_user_same_message_result(self, user_id: int) -> Optional[str]:
|
|
|
|
|
|
"""
|
|
|
|
|
|
重复消息回复
|
|
|
|
|
|
:param user_id: 用户id
|
|
|
|
|
|
"""
|
|
|
|
|
|
msg = self._data[user_id]["message"][-1]
|
|
|
|
|
|
cnt = 0
|
|
|
|
|
|
_tmp = self._data[user_id]["message"][:-1]
|
|
|
|
|
|
_tmp.reverse()
|
|
|
|
|
|
for s in _tmp:
|
|
|
|
|
|
if s == msg:
|
|
|
|
|
|
cnt += 1
|
|
|
|
|
|
else:
|
|
|
|
|
|
break
|
|
|
|
|
|
if cnt > 1:
|
|
|
|
|
|
if random.random() < 0.5 and cnt > 3:
|
|
|
|
|
|
rand = random.randint(60, 300)
|
|
|
|
|
|
await BanUser.ban(user_id, 9, rand)
|
|
|
|
|
|
self._data[user_id]["message"].clear()
|
|
|
|
|
|
return f"生气了!你好烦,闭嘴!给我老实安静{rand}秒"
|
|
|
|
|
|
return random.choice(self._same_message).format(cnt)
|
|
|
|
|
|
return None
|
|
|
|
|
|
|
|
|
|
|
|
async def _get_user_repeat_message_result(self, user_id: int) -> Optional[str]:
|
|
|
|
|
|
"""
|
|
|
|
|
|
复读真寻的消息回复
|
|
|
|
|
|
:param user_id: 用户id
|
|
|
|
|
|
"""
|
|
|
|
|
|
msg = self._data[user_id]["message"][-1]
|
|
|
|
|
|
if self._data[user_id]["result"]:
|
|
|
|
|
|
rst = self._data[user_id]["result"][-1]
|
|
|
|
|
|
else:
|
|
|
|
|
|
return None
|
|
|
|
|
|
if msg == rst:
|
|
|
|
|
|
self._data[user_id]["repeat_count"] += 1
|
|
|
|
|
|
cnt = self._data[user_id]["repeat_count"]
|
|
|
|
|
|
if cnt > 1:
|
|
|
|
|
|
if random.random() < 0.5 and cnt > 3:
|
|
|
|
|
|
rand = random.randint(60, 300)
|
|
|
|
|
|
await BanUser.ban(user_id, 9, rand)
|
|
|
|
|
|
self._data[user_id]["result"].clear()
|
|
|
|
|
|
self._data[user_id]["repeat_count"] = 0
|
|
|
|
|
|
return f"生气了!你好烦,闭嘴!给我老实安静{rand}秒"
|
|
|
|
|
|
return random.choice(self._repeat_message).format(cnt)
|
|
|
|
|
|
return None
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ai_message_manager = AiMessageManager()
|