1818import time
1919import logging
2020
21- from websocket ._exceptions import WebSocketConnectionClosedException
21+ from .API import MeowerAPI
22+
23+ from websocket ._exceptions import WebSocketConnectionClosedException , WebSocketException
2224
2325
2426class Bot :
@@ -53,6 +55,7 @@ def _t_ping(self):
5355 def __init__ (self , prefix = None , autoreload : int or None = None ): #type: ignore
5456 self .wss = CloudLink ()
5557 self .callbacks = {}
58+ self ._last_to = "Home"
5659
5760 self .wss .callback (
5861 "on_packet" , self ._debug_fix
@@ -70,8 +73,8 @@ def __init__(self, prefix=None, autoreload: int or None = None): #type: ignore
7073
7174 if autoreload :
7275 self .autoreload = True
73- self .autoreload_time = autoreload + 1
74- self .autoreload_original = autoreload + 1
76+ self .autoreload_time = min ( autoreload , 1 )
77+ self .autoreload_original = min ( autoreload , 1 )
7578 else :
7679 self .autoreload = False
7780 self .autoreload_time = 0
@@ -209,7 +212,7 @@ def _handle_status(self, status, listener):
209212 "https://webhooks.meower.org/post/home" ,
210213 json = {
211214 "post" : "ERROR: MeowerBot.py Webhooks Logging\n \n Account Softlocked." ,
212- "username" : self .username ,
215+ "username" : self .username ,
213216 },
214217 )
215218 print ("CRITICAL ERROR! ACCOUNT SOFTLOCKED!!!!." , file = sys .__stdout__ )
@@ -225,10 +228,13 @@ def _handle_status(self, status, listener):
225228
226229 elif listener == "__meowerbot__send_message" :
227230 if status == "I:100 | OK" :
231+ self .autoreload_time = self .autoreload_original
228232 return # This is just checking if a post went OK
229-
230- self .autoreload_time = self .autoreload_original #autoreload time should reset if
233+ #autoreload time should reset if
234+
235+
231236 raise RuntimeError ("Post Failed to send" )
237+
232238
233239 def callback (self , callback , cbid = None ):
234240 """Connects a callback ID to a callback"""
@@ -243,10 +249,7 @@ def __handle_close__(self, *args, **kwargs):
243249 if self .autoreload :
244250 self .autoreload = False #to stop race condisons
245251 self .logger_in = True
246- if not self .autoreload_time >= 100 : self .autoreload_time *= 1.2
247-
248- else :
249- self .autoreload_time = 100
252+ self .autoreload_time *= 1.2
250253
251254
252255 time .sleep (self .autoreload_time )
@@ -294,8 +297,15 @@ def __handle_packet__(self, packet):
294297
295298 elif packet ["cmd" ] == "direct" :
296299 listener = packet .get ("listener" )
300+
301+ if listener == "mb_get_chat_list" :
302+ self .run_cb ("chat_list" , args = (packet ["val" ]["payload" ], listener ))
303+ elif listener == "__meowerbot__login" :
304+ self .api .login (packet ['val' ]['payload' ]['token' ])
297305 self .run_cb ("direct" , args = (packet ["val" ], listener ))
298306
307+
308+
299309 else :
300310 listener = packet .get ("listener" )
301311 self .run_cb (packet ["cmd" ], args = (packet ["val" ], listener ))
@@ -317,22 +327,29 @@ def run_command(self, message):
317327 self .run_cb ("error" , args = (e ,))
318328
319329 def send_msg (self , msg , to = "home" ):
320- if to == "home" :
321- self .wss .sendPacket (
322- {
323- "cmd" : "direct" ,
324- "val" : {"cmd" : "post_home" , "val" : msg },
325- "listener" : "__meowerbot__send_message" ,
326- }
327- )
328- else :
329- self .wss .sendPacket (
330- {
331- "cmd" : "direct" ,
332- "val" : {"cmd" : "post_chat" , "val" : {"chatid" : to , "p" : msg }},
333- "listener" : "__meowerbot__send_message" ,
334- }
335- )
330+ self ._last_to = to
331+ self ._last_sent = msg
332+ try :
333+ if to == "home" :
334+ self .wss .sendPacket (
335+ {
336+ "cmd" : "direct" ,
337+ "val" : {"cmd" : "post_home" , "val" : msg },
338+ "listener" : "__meowerbot__send_message" ,
339+ }
340+ )
341+ else :
342+ self .wss .sendPacket (
343+ {
344+ "cmd" : "direct" ,
345+ "val" : {"cmd" : "post_chat" , "val" : {"chatid" : to , "p" : msg }},
346+ "listener" : "__meowerbot__send_message" ,
347+ }
348+ )
349+ #socket is closed, use webhooks
350+ except WebSocketException as e :
351+ self .run_cb (cbid = "error" , args = (e ,))
352+
336353
337354 def send_typing (self , to = "home" ):
338355 if to == "home" :
@@ -361,7 +378,7 @@ def send_typing(self, to="home"):
361378 },
362379 }
363380 )
364-
381+
365382 def enter_chat (self , chatid = "livechat" ):
366383 self .wss .sendPacket (
367384 {
@@ -376,6 +393,34 @@ def enter_chat(self, chatid="livechat"):
376393 }
377394 )
378395
396+ def create_chat (self , name ):
397+ """
398+ Unstable, use at your own risk
399+
400+ comes with callbacks: chat_list
401+ """
402+ self .wss .sendPacket ({
403+ "cmd" : "direct" ,
404+ "val" : {
405+ "cmd" : "create_chat" ,
406+ "val" : name
407+ },
408+ "listener" : "mb_create_chat"
409+ })
410+
411+ time .sleep (secs = 0.5 )
412+
413+ self .wss .sendPacket ({
414+ "cmd" : "direct" ,
415+ "val" : {
416+ "cmd" : "get_chat_list" ,
417+ "val" : {
418+ "page" : 1
419+ }
420+ },
421+ "listener" : "mb_get_chat_list"
422+ })
423+
379424
380425 def run (self , username , password , server = "wss://server.meower.org" ):
381426 """
@@ -391,6 +436,7 @@ def run(self, username, password, server="wss://server.meower.org"):
391436 self .logger = logging .getLogger (f"MeowerBot { self .username } " )
392437 self .server = server
393438 self .wss .client (server )
439+ self .api = API (self )
394440
395441 if self .bad_exit :
396442 raise BaseException ("Bot Account Softlocked" )
0 commit comments