OneBotConnecter 0.2.21__tar.gz → 0.2.30__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {onebotconnecter-0.2.21/src/OneBotConnecter.egg-info → onebotconnecter-0.2.30}/PKG-INFO +1 -1
- {onebotconnecter-0.2.21 → onebotconnecter-0.2.30}/pyproject.toml +1 -1
- {onebotconnecter-0.2.21 → onebotconnecter-0.2.30}/src/OneBotConnecter/OneBot.py +71 -17
- {onebotconnecter-0.2.21 → onebotconnecter-0.2.30/src/OneBotConnecter.egg-info}/PKG-INFO +1 -1
- {onebotconnecter-0.2.21 → onebotconnecter-0.2.30}/LICENSE +0 -0
- {onebotconnecter-0.2.21 → onebotconnecter-0.2.30}/README.md +0 -0
- {onebotconnecter-0.2.21 → onebotconnecter-0.2.30}/setup.cfg +0 -0
- {onebotconnecter-0.2.21 → onebotconnecter-0.2.30}/src/OneBotConnecter/MessageType.py +0 -0
- {onebotconnecter-0.2.21 → onebotconnecter-0.2.30}/src/OneBotConnecter/__init__.py +0 -0
- {onebotconnecter-0.2.21 → onebotconnecter-0.2.30}/src/OneBotConnecter.egg-info/SOURCES.txt +0 -0
- {onebotconnecter-0.2.21 → onebotconnecter-0.2.30}/src/OneBotConnecter.egg-info/dependency_links.txt +0 -0
- {onebotconnecter-0.2.21 → onebotconnecter-0.2.30}/src/OneBotConnecter.egg-info/top_level.txt +0 -0
|
@@ -20,41 +20,55 @@ def _on_message(bot, message):
|
|
|
20
20
|
|
|
21
21
|
#机器人接口连接
|
|
22
22
|
class OneBot:
|
|
23
|
-
|
|
23
|
+
#连接相关
|
|
24
|
+
_uri: str = None #机器人接口地址
|
|
24
25
|
bot = None #连接本体
|
|
25
|
-
|
|
26
|
+
#机器人本体信息
|
|
26
27
|
botName: list[str] = None #机器人名称
|
|
27
|
-
localtion: str = None
|
|
28
|
-
nickname: str = []
|
|
29
|
-
botAcc: int = None
|
|
28
|
+
localtion: str = None #机器人文件地址
|
|
29
|
+
nickname: str = [] #机器人账号名称
|
|
30
|
+
botAcc: int = None #机器人账号ID
|
|
31
|
+
#机器人管理信息
|
|
32
|
+
owner: list[str] = None #机器人管理员
|
|
33
|
+
#调试模式
|
|
30
34
|
testMode = False #调试模式
|
|
31
|
-
|
|
35
|
+
#信息缓存
|
|
36
|
+
message_list = [] #信息缓存
|
|
32
37
|
#构造体
|
|
33
38
|
def __init__(self, uri: str, owner: list[str] = None, botName: list[str] = None, localtion: str = None, testMode = False):
|
|
39
|
+
#接口地址
|
|
34
40
|
self._uri = uri
|
|
41
|
+
#管理员
|
|
35
42
|
if owner != None: self.owner = owner
|
|
36
43
|
else: print("[W]: Owner input is None")
|
|
44
|
+
##机器人名称
|
|
37
45
|
if botName != None: self.botName = botName
|
|
38
46
|
else: print("[W]: Bot Name input is None")
|
|
47
|
+
##机器人文件地址
|
|
39
48
|
if localtion != None: self.localtion = localtion.replace("\\", "/")
|
|
40
49
|
else: print("[W]: Main file location input is None")
|
|
50
|
+
#调试模式
|
|
41
51
|
self.testMode = testMode
|
|
42
|
-
#建立连接 (WS正向)
|
|
52
|
+
#建立连接 (WS正向) == #初次连接
|
|
43
53
|
async def run(self, on_message: __module__ = _on_message, sleep_time: int = 1):
|
|
54
|
+
#直到连接成功为止,持续尝试连接
|
|
44
55
|
while self.bot == None:
|
|
45
56
|
try: self.bot = await websockets.connect(self._uri)
|
|
46
57
|
except: await asyncio.sleep(1)
|
|
58
|
+
#更新连接状态
|
|
47
59
|
if self.bot != None:
|
|
48
60
|
self.bot = await websockets.connect(self._uri)
|
|
49
|
-
message = await self.bot.recv()
|
|
61
|
+
message = await self.bot.recv() #测试接口可用性
|
|
50
62
|
print(f"\n地址{self._uri}连接已完成")
|
|
51
|
-
await self.get_login_info()
|
|
63
|
+
await self.get_login_info() #更新机器人本体信息
|
|
52
64
|
print(f"机器人账号: {self.botAcc}")
|
|
53
65
|
print(f"机器人名称: {self.botName}")
|
|
54
66
|
if self.owner != None: print(f"机器人管理员: {self.owner}")
|
|
55
67
|
if self.localtion != None: print(f"机器人根目录地址: {self.localtion}")
|
|
56
68
|
print(f"开始监听机器人信息推送\n")
|
|
69
|
+
#持续从接口收取信息
|
|
57
70
|
while True:
|
|
71
|
+
#连接失败 => 直到连接成功为止,持续尝试重连
|
|
58
72
|
if self.bot == None:
|
|
59
73
|
try:
|
|
60
74
|
self.bot = await websockets.connect(self._uri)
|
|
@@ -62,33 +76,54 @@ class OneBot:
|
|
|
62
76
|
except:
|
|
63
77
|
print("连接失败,5秒后重试\n")
|
|
64
78
|
await asyncio.sleep(5)
|
|
79
|
+
#连接正常
|
|
65
80
|
if self.bot != None:
|
|
81
|
+
#从接口收取信息,并进行信息处理
|
|
66
82
|
task = asyncio.create_task(self._receive_messages(on_message))
|
|
67
83
|
try:
|
|
68
84
|
result = task.result()
|
|
85
|
+
#由于信息处理涵数无返回值,这里固定报错
|
|
86
|
+
#可以不作处理
|
|
69
87
|
except Exception: pass
|
|
70
88
|
await asyncio.sleep(sleep_time)
|
|
71
89
|
|
|
72
90
|
#收到信息时
|
|
73
91
|
async def _receive_messages(self, callback: __module__):
|
|
92
|
+
#连接正常
|
|
74
93
|
try:
|
|
94
|
+
#从接口收取信息
|
|
75
95
|
message = await self.bot.recv()
|
|
76
96
|
message = json.loads(message)
|
|
97
|
+
#处理 => 缓存
|
|
77
98
|
try:
|
|
99
|
+
#识别是否为心跳信息
|
|
78
100
|
if message["post_type"] != "meta_event" and self.bot != None:
|
|
79
|
-
self.message_list.append(message)
|
|
101
|
+
self.message_list.append(message) #放入缓存,排队处理
|
|
102
|
+
elif self.testMode: print(f"{message}\n") #调试模式下打印所有信息
|
|
80
103
|
except:
|
|
104
|
+
#报错处理,这里可能是来自post_type的Key_Exception
|
|
105
|
+
# 所以打印处理,方便进一步人工识别和修改
|
|
81
106
|
print(f"{message}\n")
|
|
107
|
+
#处理 => 信息
|
|
108
|
+
if self.testMode: print(f"待处理信息列表数量为: {len(self.message_list)}\n")
|
|
109
|
+
#一口气清空缓存
|
|
82
110
|
while len(self.message_list) > 0:
|
|
83
111
|
try:
|
|
84
112
|
message = self.message_list.pop(0)
|
|
85
113
|
await callback(self, message)
|
|
86
114
|
except Exception as e:
|
|
87
115
|
traceback.print_exc()
|
|
116
|
+
print("")
|
|
117
|
+
if self.testMode: print(f"信息列表处理完毕\n")
|
|
118
|
+
#连接失败
|
|
88
119
|
except websockets.exceptions.ConnectionClosed:
|
|
89
120
|
print("与机器人连接已断开\n")
|
|
90
121
|
self.bot = None
|
|
91
|
-
|
|
122
|
+
#其他奇怪报错(一般不应该触发才对)
|
|
123
|
+
except:
|
|
124
|
+
if self.testMode:
|
|
125
|
+
traceback.print_exc()
|
|
126
|
+
print("")
|
|
92
127
|
|
|
93
128
|
#为信息发送构造数据包
|
|
94
129
|
def _createDataPack(self, action: str, params: dict):
|
|
@@ -99,21 +134,39 @@ class OneBot:
|
|
|
99
134
|
return json.dumps(data)
|
|
100
135
|
#把数据包发送至机器人端口,并收集处理结果
|
|
101
136
|
async def _sendToServer(self, action: str, params: dict):
|
|
137
|
+
#构造数据包
|
|
102
138
|
datapack = self._createDataPack(action, params)
|
|
103
|
-
if self.testMode:print(f"数据包发送: {datapack}")
|
|
139
|
+
if self.testMode:print(f"数据包发送: {datapack}\n")
|
|
140
|
+
#发送
|
|
104
141
|
await self.bot.send(datapack)
|
|
142
|
+
#收集处理结果
|
|
105
143
|
try:
|
|
106
|
-
|
|
107
|
-
message = json.loads(callback)
|
|
144
|
+
#因为处理可能会有延迟,需要识别从接口收取的信息
|
|
108
145
|
loop = True
|
|
109
146
|
while loop:
|
|
147
|
+
#从接口收取信息
|
|
148
|
+
callback = await self.bot.recv()
|
|
149
|
+
message = json.loads(callback)
|
|
150
|
+
#正常返回的callback包体中有status字段
|
|
110
151
|
try:
|
|
111
152
|
status = message["status"]
|
|
112
153
|
loop = False
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
154
|
+
#如果没有,则识别是否为正常信息
|
|
155
|
+
except:
|
|
156
|
+
try:
|
|
157
|
+
if message["post_type"] != "meta_event" and self.bot != None:
|
|
158
|
+
self.message_list.append(message)
|
|
159
|
+
elif self.testMode: print(f"{message}\n")
|
|
160
|
+
except:
|
|
161
|
+
#报错处理,这里可能是来自post_type的Key_Exception
|
|
162
|
+
# 所以打印处理,方便进一步人工识别和修改
|
|
163
|
+
print(f"{message}\n")
|
|
164
|
+
#然后继续收取
|
|
165
|
+
await asyncio.sleep(1)
|
|
166
|
+
#识别完毕,返回
|
|
167
|
+
if self.testMode: print(f"数据包返回: {message}\n")
|
|
116
168
|
return message
|
|
169
|
+
#处理失败
|
|
117
170
|
except: return None
|
|
118
171
|
#调试模式开关
|
|
119
172
|
async def test(self, testMode: bool = False):
|
|
@@ -143,6 +196,7 @@ class OneBot:
|
|
|
143
196
|
elif group_id == None and user_id != None:
|
|
144
197
|
await self.send_private_msg(user_id, message)
|
|
145
198
|
else: raise TypeError("Error input in send_msg function.")
|
|
199
|
+
#发送戳一戳
|
|
146
200
|
async def send_poke(self, group_id: int = None, user_id: int = None):
|
|
147
201
|
if group_id != None and user_id != None:
|
|
148
202
|
await self.group_poke(group_id=group_id, user_id=user_id)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{onebotconnecter-0.2.21 → onebotconnecter-0.2.30}/src/OneBotConnecter.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
{onebotconnecter-0.2.21 → onebotconnecter-0.2.30}/src/OneBotConnecter.egg-info/top_level.txt
RENAMED
|
File without changes
|