first commit
This commit is contained in:
		
							
								
								
									
										5
									
								
								.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,5 @@ | ||||
| napcat/ | ||||
| logs/ | ||||
| .idea/ | ||||
| .venv/ | ||||
| data/ | ||||
							
								
								
									
										22
									
								
								config.toml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								config.toml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,22 @@ | ||||
| #napcat配置 | ||||
| bot_qq = 123456 #机器人q号 | ||||
| root_qq = 1234567 # 管理员q号 | ||||
| ws_uri = "ws://localhost:3001" # ws 地址, 可自定义端口, 默认 3001 | ||||
| webui_uri = "http://localhost:6099" # webui 地址, 可自定义端口, 默认 6099 | ||||
| webui_token =  "napcat" # webui 令牌, 默认 napcat | ||||
| ws_token = "" # ws_uri 令牌, 默认留空 | ||||
| ws_listen_ip = "localhost" # ws_uri 监听 ip, 默认 localhost 监听本机,监听全部则配置 0.0.0.0 | ||||
| remote_mode = false # 是否远程模式, 即 NapCat 服务不在本机运行 ps:ncatbot官方已废弃该参数 | ||||
|  | ||||
| # 功能配置 | ||||
| allowed_groups = "all" # 授权群聊,all为全部,eg:[123456789, 987654321] | ||||
| allowed_users = "all" # 授权用户,all为全部,eg:[123456789, 987654321] | ||||
| velocity_ip = "127.0.0.1" # velocity ip | ||||
| velocity_port = 8080 # velocity port | ||||
| velocity_token = "your velocity_token" #`velocity token | ||||
| friend_auto = true # 好友自动同意 | ||||
| group_auto = true # 无作用 | ||||
| group_welcome = true # 入群欢迎 | ||||
| group_welcome_message = "!at 欢迎加入本群,使用@bot /help获取此bot帮助" # 入群消息 !at 为@加群用户 | ||||
| group_leave = true # 退群提醒 | ||||
| group_leave_message = "用户{userid}退群了" # 退群消息 ,{userid}为退群用户id | ||||
							
								
								
									
										0
									
								
								control/__init__.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								control/__init__.py
									
									
									
									
									
										Normal file
									
								
							
							
								
								
									
										
											BIN
										
									
								
								control/__pycache__/__init__.cpython-311.pyc
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								control/__pycache__/__init__.cpython-311.pyc
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								control/__pycache__/__init__.cpython-312.pyc
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								control/__pycache__/__init__.cpython-312.pyc
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								control/__pycache__/__init__.cpython-38.pyc
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								control/__pycache__/__init__.cpython-38.pyc
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								control/__pycache__/group.cpython-311.pyc
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								control/__pycache__/group.cpython-311.pyc
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								control/__pycache__/notice.cpython-311.pyc
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								control/__pycache__/notice.cpython-311.pyc
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								control/__pycache__/private.cpython-311.pyc
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								control/__pycache__/private.cpython-311.pyc
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								control/__pycache__/request.cpython-311.pyc
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								control/__pycache__/request.cpython-311.pyc
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										150
									
								
								control/group.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										150
									
								
								control/group.py
									
									
									
									
									
										Normal 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 查看帮助" | ||||
							
								
								
									
										62
									
								
								control/notice.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										62
									
								
								control/notice.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,62 @@ | ||||
| import toml | ||||
| import logging | ||||
|  | ||||
| class notice: | ||||
|     def __init__(self,msg): | ||||
|         if msg["notice_type"] == "group_increase" or msg["notice_type"] == "group_decrease": | ||||
|             self.time = msg["time"] | ||||
|             self.self_id = msg["self_id"] | ||||
|             self.post_type = msg["post_type"] | ||||
|             self.notice_type = msg["notice_type"] | ||||
|             self.sub_type = msg["sub_type"] | ||||
|             self.group_id = msg["group_id"] | ||||
|             self.operator_id = msg["operator_id"] | ||||
|             self.user_id = msg["user_id"] | ||||
|         else: | ||||
|             pass | ||||
|  | ||||
|     def main(self): | ||||
|         if self.notice_type == "group_increase": | ||||
|             return self.group_increase() | ||||
|         elif self.notice_type == "group_decrease": | ||||
|             return self.group_decrease() | ||||
|         else: | ||||
|             return None | ||||
|  | ||||
|     def group_increase(self): | ||||
|         print(1) | ||||
|         try: | ||||
|             with open("./config.toml", "r", encoding="utf-8") as f: | ||||
|                 config = toml.load(f) | ||||
|                 group_welcome = config.get("group_welcome") | ||||
|                 print(group_welcome) | ||||
|                 group_welcome_message = config.get("group_welcome_message") | ||||
|                 print(group_welcome_message) | ||||
|                 if group_welcome: | ||||
|                     if "!at" in group_welcome_message: | ||||
|                         return group_welcome_message.replace("!at", f"[CQ:at,qq={self.user_id}]") | ||||
|                     else: | ||||
|                         return group_welcome_message | ||||
|                 else: | ||||
|                     return None | ||||
|         except Exception as e: | ||||
|             logging.error(f"读取配置文件错误:{e}") | ||||
|             return None | ||||
|  | ||||
|     def group_decrease(self): | ||||
|         try: | ||||
|             with open("./config.toml", "r", encoding="utf-8") as f: | ||||
|                 config = toml.load(f) | ||||
|                 group_leave = config.get("group_leave") | ||||
|                 group_leave_message = config.get("group_leave_message") | ||||
|                 print(group_leave_message) | ||||
|                 if group_leave: | ||||
|                     if "{userid}" in group_leave_message: | ||||
|                         return group_leave_message.replace("{userid}", str(self.user_id)) | ||||
|                     else: | ||||
|                         return group_leave_message | ||||
|                 else: | ||||
|                     return None | ||||
|         except Exception as e: | ||||
|             logging.error(f"读取配置文件错误:{e}") | ||||
|             return None | ||||
							
								
								
									
										141
									
								
								control/private.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										141
									
								
								control/private.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,141 @@ | ||||
| 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 private: | ||||
|     def __init__(self, msg): | ||||
|         self.user_id = msg.user_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): | ||||
|         texts = [seg['data']['text'].strip() for seg in self.message if seg['type'] == 'text'] | ||||
|         full_text = ' '.join(texts).strip() | ||||
|         permission = self.check_permission() | ||||
|         if permission is None: | ||||
|             return "服务器繁忙,请稍后再逝" | ||||
|         elif permission: | ||||
|             return self.menu(full_text) | ||||
|         else: | ||||
|             return "此bot未在该群启用" | ||||
|  | ||||
|  | ||||
|  | ||||
|     def check_permission(self): | ||||
|         try: | ||||
|             with open("./config.toml", "r", encoding="utf-8") as f: | ||||
|                 config = toml.load(f) | ||||
|                 allowed_users = config.get("allowed_users", []) | ||||
|         except Exception as e: | ||||
|             logging.error(str(e)) | ||||
|             return None | ||||
|  | ||||
|             # 检查当前群是否在允许列表中 | ||||
|         if allowed_users == "all": | ||||
|             return True | ||||
|         elif self.user_id in allowed_users: | ||||
|             return True | ||||
|         else: | ||||
|             return False | ||||
|  | ||||
|     def menu(self,command): | ||||
|         print( 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 查看帮助" | ||||
							
								
								
									
										42
									
								
								control/request.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										42
									
								
								control/request.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,42 @@ | ||||
| import logging | ||||
| import toml | ||||
|  | ||||
| class request: | ||||
|     def __init__(self,msg): | ||||
|         self.time = msg.time | ||||
|         self.self_id = msg.self_id | ||||
|         self.request_type = msg.request_type | ||||
|         self.sub_type = msg.sub_type | ||||
|         self.group_id = msg.group_id | ||||
|         self.user_id = msg.user_id | ||||
|         self.comment = msg.comment | ||||
|         self.flag = msg.flag | ||||
|  | ||||
|     def main(self): | ||||
|         if self.request_type == "friend": | ||||
|             friend_auto = self.get_info() | ||||
|             if friend_auto: | ||||
|                 return True | ||||
|             else: | ||||
|                 return False | ||||
|  | ||||
|  | ||||
|     def get_info(self): | ||||
|         try: | ||||
|             with open("./config.toml", "r", encoding="utf-8") as f: | ||||
|                 config = toml.load(f) | ||||
|                 friend_auto = config.get("friend_auto") | ||||
|             return friend_auto | ||||
|         except Exception as e: | ||||
|             logging.error(f"读取配置文件错误:{e}") | ||||
|             return False | ||||
|  | ||||
|     def get_allow_group(self): | ||||
|         try: | ||||
|             with open("./config.toml", "r", encoding="utf-8") as f: | ||||
|                 config = toml.load(f) | ||||
|                 allow_group = config.get("allowed_groups") | ||||
|             return allow_group | ||||
|         except Exception as e: | ||||
|             logging.error(f"读取配置文件错误:{e}") | ||||
|             return [] | ||||
							
								
								
									
										82
									
								
								main.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										82
									
								
								main.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,82 @@ | ||||
| from ncatbot.core.notice import NoticeMessage | ||||
| from ncatbot.core import BotClient, Request | ||||
| import logging | ||||
| import asyncio | ||||
| from control.group import group | ||||
| from control.private import private | ||||
| from control.request import request | ||||
| from control.notice import notice | ||||
| import toml | ||||
|  | ||||
|  | ||||
| with open("./config.toml", "r", encoding="utf-8") as f: | ||||
|     config = toml.load(f) | ||||
|     bt_uin = config.get("bot_qq") | ||||
|     root = config.get("root_qq") | ||||
|     ws_uri = config.get("ws_uri") | ||||
|     web_uri = config.get("web_uri") | ||||
|     webui_token = config.get("webui_token") | ||||
|     ws_token = config.get("ws_token") | ||||
|     ws_listen_ip = config.get("ws_listen_ip") | ||||
|     remote_mode = config.get("remote_mode") | ||||
|  | ||||
| bot = BotClient() | ||||
| api = bot.run_blocking(bt_uin=bt_uin, root=root, ws_uri=ws_uri, web_uri=web_uri, webui_token=webui_token, ws_token=ws_token, ws_listen_ip=ws_listen_ip, remote_mode=remote_mode) | ||||
|  | ||||
| @bot.group_event() | ||||
| async def on_group_message(msg): | ||||
|     logging.info(f"收到消息:{msg.raw_message},来自{msg.group_id}群聊{msg.user_id}用户") | ||||
|     if msg.user_id == 2854196310: # qq管家,防止刷屏。bot大战请看 | ||||
|         pass | ||||
|     else: | ||||
|         ctrl = group(msg) | ||||
|         return_message = ctrl.main() | ||||
|         if return_message is None: | ||||
|             return | ||||
|         else: | ||||
|             logging.info(f"返回消息:{return_message}") | ||||
|             await  bot.api.post_group_msg(group_id=msg.group_id, text=return_message, reply=msg.message_id) | ||||
|  | ||||
| @bot.private_event() | ||||
| async def on_private_message(msg): | ||||
|     logging.info(f"收到消息:{msg.raw_message},来自{msg.user_id}用户") | ||||
|     if msg.user_id == 2854196310: # qq管家,防止刷屏。 | ||||
|         pass | ||||
|     else: | ||||
|         ctrl = private(msg) | ||||
|         return_message = ctrl.main() | ||||
|         if return_message is None: | ||||
|             return | ||||
|         else: | ||||
|             logging.info(f"返回消息:{return_message}") | ||||
|             await  bot.api.post_private_msg(user_id=msg.user_id, text=return_message, reply=msg.message_id) | ||||
|  | ||||
| @bot.request_event() | ||||
| async def on_request_event(msg: Request): | ||||
|     logging.info(f"收到request事件:{msg.request_type},来自{msg.group_id}群聊,{msg.user_id}用户,验证消息:{msg.comment}") | ||||
|     ctrl = request(msg) | ||||
|     accept_friend_application = ctrl.main() | ||||
|     if accept_friend_application is True: | ||||
|         await msg.reply(True, comment="请求已通过") | ||||
|         logging.info("请求已通过") | ||||
|     else: | ||||
|         await msg.reply(False, comment="请求被拒绝") | ||||
|         logging.info("请求被拒绝") | ||||
|  | ||||
|  | ||||
|  | ||||
| @bot.notice_event() | ||||
| async  def on_notice_event(msg: NoticeMessage): | ||||
|     logging.info(f"收到notice事件:{msg['notice_type']},来自{msg['group_id']}群聊,{msg['user_id']}用户") | ||||
|     ctrl = notice(msg) | ||||
|     return_message = ctrl.main() | ||||
|     if return_message is None: | ||||
|         return | ||||
|     else: | ||||
|         logging.info(f"返回消息:{return_message}") | ||||
|         await  bot.api.post_group_msg(group_id=msg["group_id"], text=return_message) | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
| asyncio.get_event_loop().run_forever() | ||||
							
								
								
									
										55
									
								
								model/AiCat.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										55
									
								
								model/AiCat.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,55 @@ | ||||
| import requests | ||||
| import json | ||||
| import logging | ||||
|  | ||||
| class AiCat: | ||||
|     def __init__(self,message,qid): | ||||
|         self.message = message | ||||
|         self.qid = qid | ||||
|         self.query = f"<qid>{self.qid}</qid>{self.message}" | ||||
|         print(self.query) # test | ||||
|     def main(self): | ||||
|         # API URL | ||||
|         url = "https://ai.mcunc.cn/v1/chat-messages"  # 替换为实际的 API 地址 | ||||
|  | ||||
|         # 请求头 | ||||
|         headers = { | ||||
|             "Content-Type": "application/json", | ||||
|             "Authorization": "Bearer app-pqib8uic8oBP95XmXuBi5ANq"  # 替换为你的 API 密钥 | ||||
|         } | ||||
|  | ||||
|         # 请求体 | ||||
|         payload = { | ||||
|             "query": self.query,  # 用户输入/提问内容 | ||||
|             "inputs": {},  # App 定义的变量值(默认为空) | ||||
|             "response_mode": "blocking",  # 流式模式或阻塞模式 | ||||
|             "user": "QBotAPI",  # 用户标识,需保证唯一性 | ||||
|             "conversation_id": "09cc6545-b0e0-4611-aad1-cf9bf51600e1",  # (选填)会话 ID,继续对话时需要传入 | ||||
|             "files": [],  # 文件列表(选填),适用于文件结合文本理解 | ||||
|             "auto_generate_name": True  # (选填)自动生成标题,默认为 True | ||||
|         } | ||||
|  | ||||
|         # 发送 POST 请求 | ||||
|         try: | ||||
|             response = requests.post(url, headers=headers, data=json.dumps(payload)) | ||||
|  | ||||
|             # 检查响应状态码 | ||||
|             if response.status_code == 200: | ||||
|                 logging.info("请求成功!返回结果:") | ||||
|                 response_data = response.json() | ||||
|                 logging.info(json.dumps(response_data, indent=4, ensure_ascii=False))  # 格式化输出 JSON | ||||
|  | ||||
|                 # 提取 answer 值 | ||||
|                 answer = response_data.get("answer", "answer 字段不存在") | ||||
|                 print(response_data.get("conversation_id")) # test | ||||
|                 return answer | ||||
|             else: | ||||
|                 logging.info(f"请求失败!状态码: {response.status_code}") | ||||
|                 logging.info(f"错误信息: {response.text}")  # 打印错误信息 | ||||
|                 return "诶呀! 服务器好像出现了一点点错误呐~稍等一会再重试哦喵~" | ||||
|  | ||||
|         except Exception as e: | ||||
|             logging.info(f"请求过程中出现异常: {e}") | ||||
|             return "诶呀! 服务器好像出现了一点点错误呐~稍等一会再重试哦喵~" | ||||
|  | ||||
|  | ||||
							
								
								
									
										51
									
								
								model/McBind.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										51
									
								
								model/McBind.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,51 @@ | ||||
| import requests | ||||
| import json | ||||
| import logging | ||||
| import toml | ||||
|  | ||||
| class McBind: | ||||
|     def __init__(self,qid,code): | ||||
|         self.qid = qid | ||||
|         self.code = code | ||||
|  | ||||
|     def main(self): | ||||
|         with open('./config.toml', 'r', encoding='utf-8') as f: | ||||
|             config = toml.load(f) | ||||
|  | ||||
|         # 获取所需字段 | ||||
|         velocity_ip = config.get("velocity_ip") | ||||
|         velocity_port = config.get("velocity_port") | ||||
|         velocity_token = config.get("velocity_token") | ||||
|         # API URL | ||||
|         url = f"http://{velocity_ip}:{velocity_port}/vc/blind"  # 替换为实际的 API 地址 | ||||
|  | ||||
|         # 请求头 | ||||
|         headers = { | ||||
|             "Content-Type": "application/json", | ||||
|             "Authorization": velocity_token  # 替换为你的 API 密钥 | ||||
|         } | ||||
|  | ||||
|         # 请求体 | ||||
|         payload = { | ||||
|             "qqID": self.qid, | ||||
|             "code": self.code | ||||
|         } | ||||
|  | ||||
|         # 发送 POST 请求 | ||||
|         try: | ||||
|             response = requests.post(url, headers=headers, data=json.dumps(payload)) | ||||
|  | ||||
|             # 检查响应状态码 | ||||
|             if response.status_code == 200: | ||||
|                 return "您已成功绑定MCUNC游戏账户" | ||||
|             elif response.status_code == 403: | ||||
|                 logging.info("授权码不存在或过期") | ||||
|                 return "授权码不存在或过期" | ||||
|             else: | ||||
|                 logging.error("请求失败!状态码: {response.status_code}") | ||||
|                 logging.error(f"错误信息: {response.text}")  # 打印错误信息 | ||||
|                 return "服务器繁忙,请稍后再逝" | ||||
|  | ||||
|         except Exception as e: | ||||
|             logging.error(f"请求过程中出现异常: {e}") | ||||
|             return "服务器繁忙,请稍后再逝" | ||||
							
								
								
									
										55
									
								
								model/McFind.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										55
									
								
								model/McFind.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,55 @@ | ||||
| import requests | ||||
| import json | ||||
| import logging | ||||
| import toml | ||||
|  | ||||
| class McFind: | ||||
|     def __init__(self,name): | ||||
|         self.name = name | ||||
|  | ||||
|     def main(self): | ||||
|         with open('./config.toml', 'r', encoding='utf-8') as f: | ||||
|             config = toml.load(f) | ||||
|  | ||||
|         # 获取所需字段 | ||||
|         velocity_ip = config.get("velocity_ip") | ||||
|         velocity_port = config.get("velocity_port") | ||||
|         velocity_token = config.get("velocity_token") | ||||
|         # API URL | ||||
|         url = f"http://{velocity_ip}:{velocity_port}/vc/find_player"  # 替换为实际的 API 地址 | ||||
|  | ||||
|         # 请求头 | ||||
|         headers = { | ||||
|             "Content-Type": "application/json", | ||||
|             "Authorization": velocity_token  # 替换为你的 API 密钥 | ||||
|         } | ||||
|  | ||||
|         # 请求体 | ||||
|         payload = { | ||||
|             "name": self.name, | ||||
|         } | ||||
|  | ||||
|         # 发送 POST 请求 | ||||
|         try: | ||||
|             response = requests.post(url, headers=headers, data=json.dumps(payload)) | ||||
|  | ||||
|             # 检查响应状态码 | ||||
|             if response.status_code == 200: | ||||
|                 logging.info("请求成功!返回结果:") | ||||
|                 response_data = response.json() | ||||
|                 logging.info(json.dumps(response_data, indent=4, ensure_ascii=False))  # 格式化输出 JSON | ||||
|                 # 提取 answer 值 | ||||
|                 online = response_data.get("online", "online 字段不存在") | ||||
|                 server = response_data.get("server", "server 字段不存在") | ||||
|                 if online: | ||||
|                     return f"{self.name}在线,所在服务器:{server}" | ||||
|                 else: | ||||
|                     return f"{self.name}不在线" | ||||
|             else: | ||||
|                 logging.error(f"请求失败!状态码: {response.status_code}") | ||||
|                 logging.error(f"错误信息: {response.text}")  # 打印错误信息 | ||||
|                 return "服务器繁忙,请稍后再逝" | ||||
|  | ||||
|         except Exception as e: | ||||
|             logging.error(f"请求过程中出现异常: {e}") | ||||
|             return "服务器繁忙,请稍后再逝" | ||||
							
								
								
									
										68
									
								
								model/McHh.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										68
									
								
								model/McHh.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,68 @@ | ||||
| import requests | ||||
| import json | ||||
| import logging | ||||
| import toml | ||||
|  | ||||
| class McHh: | ||||
|     def __init__(self,qid,message): | ||||
|         self.qid = qid | ||||
|         self.message = message | ||||
|  | ||||
|     def main(self): | ||||
|         with open('./config.toml', 'r', encoding='utf-8') as f: | ||||
|             config = toml.load(f) | ||||
|  | ||||
|         # 获取所需字段 | ||||
|         velocity_ip = config.get("velocity_ip") | ||||
|         velocity_port = config.get("velocity_port") | ||||
|         velocity_token = config.get("velocity_token") | ||||
|         # API URL | ||||
|         url = f"http://{velocity_ip}:{velocity_port}/vc/hh"  # 替换为实际的 API 地址 | ||||
|  | ||||
|         # 请求头 | ||||
|         headers = { | ||||
|             "Content-Type": "application/json", | ||||
|             "Authorization": velocity_token  # 替换为你的 API 密钥 | ||||
|         } | ||||
|  | ||||
|         # 请求体 | ||||
|         payload = { | ||||
|             "qID": self.qid, | ||||
|             "message": self.message | ||||
|         } | ||||
|  | ||||
|         # 发送 POST 请求 | ||||
|         try: | ||||
|             response = requests.post(url, headers=headers, data=json.dumps(payload)) | ||||
|  | ||||
|             time = response.text | ||||
|  | ||||
|             try: | ||||
|                 time = int(time) | ||||
|                 seconds = time / 1000 | ||||
|                 formatted_time = round(seconds, 1) | ||||
|             except Exception as e : | ||||
|                 logging.error(f"请求过程中出现异常: {e}") | ||||
|                 return "服务器繁忙,请稍后再逝" | ||||
|  | ||||
|             # 检查响应状态码 | ||||
|             if response.status_code == 200: | ||||
|                 return "喊话成功" | ||||
|  | ||||
|             elif response.status_code == 403: | ||||
|                 return "您未绑定MCUNC游戏账户,请先绑定后重试" | ||||
|  | ||||
|             elif response.status_code == 429: | ||||
|                 return f"喊话过快,剩余时间:{formatted_time}s" | ||||
|  | ||||
|             elif response.status_code == 409: | ||||
|                 return "喊话失败:您没有足够的话筒!" | ||||
|              | ||||
|             else: | ||||
|                 logging.error(f"请求失败!状态码: {response.status_code}") | ||||
|                 logging.error(f"错误信息: {response.text}")  # 打印错误信息 | ||||
|                 return "服务器繁忙,请稍后再逝" | ||||
|  | ||||
|         except Exception as e: | ||||
|             logging.error(f"请求过程中出现异常: {e}") | ||||
|             return "服务器繁忙,请稍后再逝" | ||||
							
								
								
									
										87
									
								
								model/McList.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										87
									
								
								model/McList.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,87 @@ | ||||
| import requests | ||||
| import json | ||||
| import logging | ||||
| import toml | ||||
|  | ||||
| class McList: | ||||
|     def __init__(self,server,page): | ||||
|         self.server = server | ||||
|         self.page = page | ||||
|     def main(self): | ||||
|         with open('./config.toml', 'r', encoding='utf-8') as f: | ||||
|             config = toml.load(f) | ||||
|  | ||||
|         # 获取所需字段 | ||||
|         velocity_ip = config.get("velocity_ip") | ||||
|         velocity_port = config.get("velocity_port") | ||||
|         velocity_token = config.get("velocity_token") | ||||
|         # API URL | ||||
|         url = f"http://{velocity_ip}:{velocity_port}/vc/query" | ||||
|  | ||||
|         # 请求头 | ||||
|         headers = { | ||||
|             "Content-Type": "application/json", | ||||
|             "Authorization": velocity_token  # 替换为你的 API 密钥 | ||||
|         } | ||||
|  | ||||
|         # 请求体 | ||||
|         payload = { | ||||
|             "server": self.server, | ||||
|             "page": self.page | ||||
|         } | ||||
|  | ||||
|         # 发送 POST 请求 | ||||
|         try: | ||||
|             response = requests.post(url, headers=headers, data=json.dumps(payload)) | ||||
|  | ||||
|             # 检查响应状态码 | ||||
|             if response.status_code == 200: | ||||
|                 logging.info("请求成功!返回结果:") | ||||
|                 response_data = response.json() | ||||
|                 logging.info(json.dumps(response_data, indent=4, ensure_ascii=False))  # 格式化输出 JSON | ||||
|  | ||||
|                 # 提取 player_number 值 | ||||
|                 player_number = response_data.get("player_number", "player_number 字段不存在") | ||||
|                 totalpage = response_data.get("totalPage", "totalPage 字段不存在") | ||||
|                 players = response_data.get("players", "players 字段不存在") | ||||
|  | ||||
|                 try: | ||||
|                     page = int(self.page) | ||||
|                     formatted_page = page + 1 | ||||
|                 except Exception as e: | ||||
|                     logging.error(f"请求过程中出现异常: {e}") | ||||
|                     return "服务繁忙,请稍后再逝" | ||||
|                  | ||||
|                 try: | ||||
|                     formatted_totalpage = int(totalpage) | ||||
|                     if formatted_totalpage == 0: | ||||
|                         formatted_totalpage = 1 | ||||
|                     elif formatted_totalpage == -1: | ||||
|                         return f"服务器:{self.server} 不存在" | ||||
|                     else: | ||||
|                         formatted_totalpage = totalpage | ||||
|                         success = True | ||||
|                 except Exception as e: | ||||
|                     logging.info(f"请求过程中出现异常: {e}") | ||||
|                     return "服务器繁忙,请稍后再逝" | ||||
|                  | ||||
|                 if players is None : | ||||
|                     logging.info("玩家列表为空") | ||||
|                     formatted_players = "" | ||||
|                 else: | ||||
|                     try: | ||||
|                         formatted_players = "\n".join(f"{i+1}、{player}" for i, player in enumerate(players)) | ||||
|                     except Exception as e: | ||||
|                         logging.info(f"请求过程中出现异常: {e}") | ||||
|                         return "服务器繁忙,请稍后再逝" | ||||
|                 answer = f"当前服务器共有{player_number}个玩家,\n{formatted_players} \n [{formatted_page}页/{formatted_totalpage}页]" | ||||
|                 return answer | ||||
|             else: | ||||
|                 logging.info(f"请求失败!状态码: {response.status_code}") | ||||
|                 logging.info(f"错误信息: {response.text}") | ||||
|                 logging.info(response.json) | ||||
|                 return "服务器繁忙,请稍后再逝" | ||||
|  | ||||
|         except Exception as e: | ||||
|             logging.info(f"请求过程中出现异常: {e}") | ||||
|             return "服务器繁忙,请稍后再逝" | ||||
							
								
								
									
										0
									
								
								model/__init__.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								model/__init__.py
									
									
									
									
									
										Normal file
									
								
							
							
								
								
									
										
											BIN
										
									
								
								model/__pycache__/AiCat.cpython-311.pyc
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								model/__pycache__/AiCat.cpython-311.pyc
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								model/__pycache__/AiCat.cpython-312.pyc
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								model/__pycache__/AiCat.cpython-312.pyc
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								model/__pycache__/AiCat.cpython-38.pyc
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								model/__pycache__/AiCat.cpython-38.pyc
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								model/__pycache__/McBind.cpython-311.pyc
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								model/__pycache__/McBind.cpython-311.pyc
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								model/__pycache__/McBind.cpython-312.pyc
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								model/__pycache__/McBind.cpython-312.pyc
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								model/__pycache__/McBind.cpython-38.pyc
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								model/__pycache__/McBind.cpython-38.pyc
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								model/__pycache__/McFind.cpython-311.pyc
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								model/__pycache__/McFind.cpython-311.pyc
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								model/__pycache__/McFind.cpython-312.pyc
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								model/__pycache__/McFind.cpython-312.pyc
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								model/__pycache__/McFind.cpython-38.pyc
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								model/__pycache__/McFind.cpython-38.pyc
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								model/__pycache__/McHh.cpython-311.pyc
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								model/__pycache__/McHh.cpython-311.pyc
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								model/__pycache__/McHh.cpython-312.pyc
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								model/__pycache__/McHh.cpython-312.pyc
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								model/__pycache__/McHh.cpython-38.pyc
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								model/__pycache__/McHh.cpython-38.pyc
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								model/__pycache__/McList.cpython-311.pyc
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								model/__pycache__/McList.cpython-311.pyc
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								model/__pycache__/McList.cpython-312.pyc
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								model/__pycache__/McList.cpython-312.pyc
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								model/__pycache__/McList.cpython-38.pyc
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								model/__pycache__/McList.cpython-38.pyc
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								model/__pycache__/__init__.cpython-311.pyc
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								model/__pycache__/__init__.cpython-311.pyc
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								model/__pycache__/__init__.cpython-312.pyc
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								model/__pycache__/__init__.cpython-312.pyc
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								model/__pycache__/__init__.cpython-38.pyc
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								model/__pycache__/__init__.cpython-38.pyc
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
		Reference in New Issue
	
	Block a user