@@ -10,20 +10,20 @@ class User:
1010
1111 def __init__ (self , debug = "WARNING" , ** kwargs ):
1212 self ._init_logger (debug )
13- print ( self .authKey () )
13+ self .session = Session ( )
1414
1515 def _init_logger (self , level ):
1616 """Initialize logger."""
1717
1818 self .logger = get_logger ('CactusBot' )
1919
20- level = level .upper ()
21-
2220 if level is True :
2321 level = "DEBUG"
2422 elif level is False :
2523 level = "WARNING"
2624
25+ level = level .upper ()
26+
2727 levels = ("CRITICAL" , "ERROR" , "WARNING" , "INFO" , "DEBUG" , "NOTSET" )
2828 if level in levels :
2929 level_num = __import__ ("logging" ).__getattribute__ (level )
@@ -64,37 +64,69 @@ def request(self, req, url, **kwargs):
6464 else :
6565 self .logger .debug ("Invalid request: {}" .format (req ))
6666
67- def authKey (self ):
68- """Get the required authKey from Beam"""
69- return self .request ("GET" , "/chats/join" )
70-
7167 def login (self , username , password , code = '' ):
7268 """Authenticate and login with Beam."""
73- return self .request ("GET" , "/users/login" , locals ())
69+ l = locals ()
70+ packet = {n : l [n ] for n in ("username" , "password" , "code" )}
71+ return self .request ("POST" , "/users/login" , data = packet )
7472
7573 def get_channel (self , id , ** p ):
7674 """Get channel data by username."""
77- channel = self .request ("GET" , "/channels/{id}" .format (id = id ))
78- return channel
75+ return self .request ("GET" , "/channels/{id}" .format (id = id ), params = p )
76+
77+ def get_chat (self , id ):
78+ """Get chat server data."""
79+ return self .request ("GET" , "/chats/{id}" .format (id = id ))
80+
81+ def connect (self , channel_id , bot_id ):
82+ """Connect to a Beam chat through a websocket."""
83+
84+ chat = self .get_chat (channel_id )
85+ server = chat ["endpoints" ][0 ]
86+ authkey = chat ["authkey" ]
87+
88+ self .logger .debug ("Connecting to: {server}" .format (server = server ))
89+
90+ self .websocket = yield from connect (server )
91+
92+ response = yield from self .send_message (
93+ (channel_id , bot_id , authkey ), method = "auth"
94+ )
95+
96+ response = loads (response )
97+
98+ if response ["data" ]["authenticated" ]:
99+ self .logger .debug (response )
100+ return self .websocket
101+ return False
102+
103+ def send_message (self , arguments , method = "msg" ):
104+ """Send a message to a Beam chat through a websocket."""
105+
106+ if isinstance (arguments , str ):
107+ arguments = (arguments ,)
79108
80- def send_chat (self , id , message ):
81- """
82- Send a message for a certain chat
83- Arguments:
84- - id: Channel ID to send message to
85- - message: Chat message to send
86- """
87- # Packet to send to Beam
88- # packet = {t pu}
109+ msg_packet = {
110+ "type" : "method" ,
111+ "method" : method ,
112+ "arguments" : arguments ,
113+ "id" : self .message_id
114+ }
89115
116+ yield from self .websocket .send (dumps (msg_packet ))
117+ self .message_id += 1
90118
91- class Chatter :
119+ return ( yield from self . websocket . recv ())
92120
93- def ban (username ):
94- pass
121+ def remove_message (self , channel_id , message_id ):
122+ """Remove a message from chat."""
123+ return self .request ("DELETE" , "/chats/{id}/message/{message}" .format (
124+ id = channel_id , message = message_id ))
95125
96- def purge (username ):
97- pass
126+ def read_chat (self , handle = None ):
127+ while True :
128+ response = loads ((yield from self .websocket .recv ()))
129+ self .logger .debug (response )
98130
99- def timeout ( username , time ) :
100- pass
131+ if handle :
132+ handle ( response )
0 commit comments