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.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: OneBotConnecter
3
- Version: 0.2.21
3
+ Version: 0.2.30
4
4
  Summary: 基于websocket(服务器正向)连接的onebot11通用python接口
5
5
  Author-email: Sugar51243 <1733682365@qq.com>
6
6
  License: MIT License
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "OneBotConnecter"
7
- version = "0.2.21"
7
+ version = "0.2.30"
8
8
  authors = [
9
9
  { name="Sugar51243", email="1733682365@qq.com" },
10
10
  ]
@@ -20,41 +20,55 @@ def _on_message(bot, message):
20
20
 
21
21
  #机器人接口连接
22
22
  class OneBot:
23
- _uri: str = None #机器人地址
23
+ #连接相关
24
+ _uri: str = None #机器人接口地址
24
25
  bot = None #连接本体
25
- owner: list[str] = None #机器人管理员
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
- message_list = [] #缓存信息
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
- except: pass
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
- callback = await self.bot.recv()
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
- except:
114
- self.message_list.append(message)
115
- if self.testMode: print(f"数据包返回: {message}")
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)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: OneBotConnecter
3
- Version: 0.2.21
3
+ Version: 0.2.30
4
4
  Summary: 基于websocket(服务器正向)连接的onebot11通用python接口
5
5
  Author-email: Sugar51243 <1733682365@qq.com>
6
6
  License: MIT License