first commit

This commit is contained in:
2025-07-05 17:26:12 +08:00
commit cef359da64
39 changed files with 820 additions and 0 deletions

150
control/group.py Normal file
View File

@@ -0,0 +1,150 @@
from model.AiCat import AiCat
from model.McList import McList
from model.McFind import McFind
from model.McHh import McHh
from model.McBind import McBind
import toml
import logging
class group:
def __init__(self, msg):
self.user_id = msg.user_id
self.group_id = msg.group_id
self.message_id = msg.message_id
self.message_type = msg.message_type
self.raw_message = msg.raw_message
self.sender = msg.sender
self.message = msg.message
self.self_id = msg.self_id
self.time = msg.time
def main(self):
is_at = self.is_at()
if is_at is None:
return None
else:
permission = self.check_permission()
if permission is None:
return "服务器繁忙,请稍后再逝"
elif permission:
return self.menu(is_at)
else:
return "此bot未在该群启用"
def is_at(self):
for seg in self.message:
if seg['type'] == 'at' and seg['data'].get('qq') == str(self.self_id):
texts = [s['data']['text'].strip() for s in self.message if s['type'] == 'text']
full_text = ' '.join(texts).strip()
return full_text
return None
def check_permission(self):
try:
with open("./config.toml", "r", encoding="utf-8") as f:
config = toml.load(f)
allowed_groups = config.get("allowed_groups", [])
except Exception as e:
logging.error(str(e))
return None
# 检查当前群是否在允许列表中
if allowed_groups == "all":
return True
elif self.group_id in allowed_groups:
return True
else:
return False
def menu(self,command):
if command.startswith("/help"):
return " \n /help -- 获取帮助 \n /list [服务器名/all] [页数] -- 列出服务器在线人数 \n /find <玩家名>-- 查找指定玩家是否在线 \n /bind <授权码> -- 绑定UNC游戏账户 \n /hh <喊话内容> -- 全服喊话 \n /cat <聊天内容> -- 与猫娘对话 \n /chat <提问内容> -- 智能问答(开发中,暂不可用) \n /status -- 查看bot状态 \n <必要参数> [可选参数]"
elif command.startswith("/list"):
# 去除前导空格并分割命令
parts = command.strip().split()
if len(parts) == 1:
# 只有 "/list" 命令
server = 'all'
page = '1'
elif len(parts) == 2:
# "/list server"
server = parts[1]
page = '1'
elif len(parts) == 3:
# "/list server page"
server = parts[1]
page = parts[2]
else:
return "参数错误 \n 格式:/list [服务器名/all] [页数]"
try:
page = int(page)
if page < 1:
return "请输入大于1的页数 \n 格式:/list [服务器名/all] [页数]"
except ValueError:
return "输入的页数需为整数 \n 格式 /list [服务器名/all] [页数]"
except Exception as e:
return "服务器繁忙,请稍后再逝"
page -= 1
list_player = McList(server, page)
answer = McList.main(list_player)
return answer
elif command.startswith("/find"):
# 排除 " /find "" /find"未传参情况
parts = command.split("/find ", 1)
if len(parts) > 1:
chat_content = parts[1].strip()
if chat_content:
find = McFind(chat_content)
answer = McFind.main(find)
return answer
else:
return "请提供查找的玩家名 \n 格式:/find <玩家名>"
else:
return "请提供查找的玩家名 \n 格式:/find <玩家名>"
elif command.startswith("/hh"):
# 排除“ /hh "” /hh“未传参情况
parts = command.split("/hh ", 1)
if len(parts) > 1:
chat_content = parts[1].strip()
if chat_content:
hh = McHh(self.user_id,chat_content)
answer = McHh.main(hh)
return answer
else:
return "请提供喊话内容 \n 格式:/hh <喊话内容>"
else:
return "请提供喊话内容 \n 格式:/hh <喊话内容>"
elif command.startswith("/chat"):
return "智能问答功能正在开发中,尚不可用!\n开发进度5%"
elif command.startswith("/cat"):
# # 排除 " /cat "" /cat"未传参情况
# parts = self.content.split(" /cat ", 1)
# if len(parts) > 1:
# chat_content = parts[1].strip()
# if chat_content:
# cat = AiCat(chat_content,self.id)
# answer = AiCat.main(cat)
# return answer
# else:
# return "你似乎没有提供想和我聊的内容喵~ \n 格式:/cat <提问内容>"
# else:
# return "你似乎没有提供想和我聊的内容喵~ \n 格式:/cat <提问内容>"
return "该内容已移动至猫娘qbot"
elif command.startswith("/bind"):
# 排除“ /bind "” /bind“未传参情况
parts = command.split("/bind ", 1)
if len(parts) > 1:
chat_content = parts[1].strip()
if chat_content:
bind = McBind(self.user_id, chat_content)
answer = McBind.main(bind)
return answer
else:
return "授权码不可为空 \n 格式:/bind <授权码> \n 在服务器内输入/bind指令获取授权码"
else:
return "授权码不可为空 \n 格式:/bind <授权码>"
elif command.startswith("/status"):
return "---MCUNC QBOT---\n Q bot 运行正常 \n 版本: 2.0 pre \n © 融玩文化 | 无尽创意MCUNC"
# return "\n Q Bot运行正常 \n Version: 0.2.1 pre-release \n © 融玩文化 | 无尽创意mcunc"
else:
return "功能不存在 \n 输入/help 查看帮助"