@@ -10,20 +10,20 @@ class User:
10
10
11
11
def __init__ (self , debug = "WARNING" , ** kwargs ):
12
12
self ._init_logger (debug )
13
- print ( self .authKey () )
13
+ self .session = Session ( )
14
14
15
15
def _init_logger (self , level ):
16
16
"""Initialize logger."""
17
17
18
18
self .logger = get_logger ('CactusBot' )
19
19
20
- level = level .upper ()
21
-
22
20
if level is True :
23
21
level = "DEBUG"
24
22
elif level is False :
25
23
level = "WARNING"
26
24
25
+ level = level .upper ()
26
+
27
27
levels = ("CRITICAL" , "ERROR" , "WARNING" , "INFO" , "DEBUG" , "NOTSET" )
28
28
if level in levels :
29
29
level_num = __import__ ("logging" ).__getattribute__ (level )
@@ -64,37 +64,69 @@ def request(self, req, url, **kwargs):
64
64
else :
65
65
self .logger .debug ("Invalid request: {}" .format (req ))
66
66
67
- def authKey (self ):
68
- """Get the required authKey from Beam"""
69
- return self .request ("GET" , "/chats/join" )
70
-
71
67
def login (self , username , password , code = '' ):
72
68
"""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 )
74
72
75
73
def get_channel (self , id , ** p ):
76
74
"""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 ,)
79
108
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
+ }
89
115
116
+ yield from self .websocket .send (dumps (msg_packet ))
117
+ self .message_id += 1
90
118
91
- class Chatter :
119
+ return ( yield from self . websocket . recv ())
92
120
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 ))
95
125
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 )
98
130
99
- def timeout ( username , time ) :
100
- pass
131
+ if handle :
132
+ handle ( response )
0 commit comments