mirror of
https://github.com/zhenxun-org/zhenxun_bot.git
synced 2025-12-15 14:22:55 +08:00
141 lines
5.3 KiB
Python
Executable File
141 lines
5.3 KiB
Python
Executable File
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: 用户昵称
|
||
"""
|
||
try:
|
||
if len(self._data[user_id]["message"]) < 2:
|
||
return None
|
||
except KeyError:
|
||
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()
|