def userJoin(result, result_user): global websocket cur_time = int(datetime.now().strftime("%M")) print ('User joined:\t', result_user, '-', result['data']['id'], end='\n\n') config = _updateConfig() if result['data']['id'] != 25873: # PyBot ID if config['announce_enter'] == True and result_user != None:\ if result_user not in announce_users: # Only if it's beyond 3 minutes of the original enter/leave send the messages response = "Welcome " + result_user + " to the stream!" yield from messages.sendMsg(websocket, response) announce_users[result_user] = cur_time else: if cur_time - int(announce_users[result_user]) > 3: response = "Welcome " + result_user + " to the stream!" yield from messages.sendMsg(websocket, response) announce_users[result_user] = cur_time
def connect(): global initTime, authkey_control, endpoint_control, user_id websocket = yield from websockets.connect(endpoint_control) content = [22085, user_id, authkey_control] ret = yield from messages.sendMsg(websocket, content, is_auth=True) ret = ret.split('"id"')[0][:-1] + "}" ret = json.loads(ret) if ret["error"] != None: print("CONTROL CHANNEL") print("Error:\t", ret["error"]) print("Error - Non-None error returned!") quit() curTime = str(datetime.now().strftime("%H.%M.%S")) + " - " + str(datetime.now().strftime("%D")) msg_to_send = "Bot online - Current Date/Time: {}".format(str(curTime)) ret_msg = yield from messages.sendMsg(websocket, msg_to_send) ret_msg = json.loads(ret_msg) yield from messages.close(websocket) websocket = yield from websockets.connect(endpoint) content = [channel, user_id, authkey] ret = yield from messages.sendMsg(websocket, content, is_auth=True) ret = ret.split('"id"')[0][:-1] + "}" ret = json.loads(ret) if ret["error"] != None: print("MAIN CHANNEL") print(ret["error"]) print("Error - Non-None error returned!") quit() if not args.nostartmsg: if int(datetime.now().strftime("%H")) < 12: # It's before 12 PM - morning timeStr = "mornin'" elif int(datetime.now().strftime("%H")) >= 12 and int(datetime.now().strftime("%H")) < 17: # It's afternoon timeStr = "afternoon" elif int(datetime.now().strftime("%H")) >= 17: # It's after 5 - evening timeStr = "evenin'" msg_to_send = "Top o' the {} to you!".format(timeStr) ret_msg = yield from messages.sendMsg(websocket, msg_to_send) yield from messages.close(websocket) else: yield from messages.close(websocket)
def timeoutsHandler(): global websocket prev_messages = [] initial = True while True: if len(scheduled_list) != 0: message = random.randrange(0, len(scheduled_list)) text = scheduled_list[message] if not initial: yield from messages.sendMsg(websocket, text) print ('Scheduled message:\t', text) prev_messages.append(text) yield from asyncio.sleep(300) initial = False
def userLeave(result, result_user): global websocket cur_time = int(datetime.now().strftime("%M")) print ('User left:\t', result_user, '-', result['data']['id'], end='\n\n') config = _updateConfig() if result['data']['id'] != 25873: # PyBot ID if config['announce_leave'] == True and result_user != None: if result_user not in announce_users: response = "See you later " + result_user + "!" yield from messages.sendMsg(websocket, response) announce_users[result_user] = cur_time
def readChat(): global initTime, activeChat, user_id, websocket, chat_socket activeChat = [] msgLocalID = 0 goodbye = False announce_users = {} session = requests.Session() activeChat = [] websocket = yield from websockets.connect(endpoint) content = [channel, user_id, authkey] yield from messages.sendMsg(websocket, content, is_auth=True) while True: time_pre_recv = datetime.now().strftime("%M") result = yield from websocket.recv() schedule.registerWebsocket(websocket) announce.registerWebsocket(websocket) if result == None: continue try: result = json.loads(result) except TypeError as e: continue if "event" in result: # Otherwise it crashes when type = response event = result["event"] if "username" in result["data"]: result_user = result["data"]["username"] elif "user_name" in result["data"]: result_user = result["data"]["user_name"] cur_time = int(datetime.now().strftime("%M")) if event == "UserJoin": yield from announce.userJoin(result, result_user) if event == "UserLeave": yield from announce.userLeave(result, result_user) elif event == "ChatMessage": msg = result["data"] msg_id = msg["id"] user_roles = msg["user_roles"] user_name = msg["user_name"] user_id = msg["user_id"] user_msg = msg["message"]["message"] meta = msg["message"]["meta"] print("User:\t\t", user_name, "-", user_id) msg_text = "" if len(user_msg) > 1: # There's an emoticon in there for section in user_msg: if section["type"] == "text" and section["data"] != "": msg_text += section["data"] elif section["type"] == "emoticon": # Emoticon msg_text += section["text"] elif section["type"] == "link": # Link/URL msg_text += section["text"] else: # Updated form /me handling - to be released Oct 18-19 by Beam if "meta" in user_msg[0]: # /me message if "me" in user_msg[0]["meta"]: msg_text += user_msg[0]["message"] elif user_msg[0]["type"] == "text" and user_msg[0]["data"] != "": msg_text += user_msg[0]["data"] print("Message:\t", msg_text, end="\n\n") if user_name not in activeChat: activeChat.append(user_name) response, goodbye = commands.prepCMD(msg, msgLocalID, websocket, user_name, user_roles, user_id) if goodbye: # If goodbye is set to true, bot is supposed to turn off yield from messages.sendMsg(websocket, response) # Send the message yield from messages.sendMsg(websocket, "See ya later!") # Send goodbye msg yield from messages.close(websocket) print("Bot quit", str(datetime.now().strftime("%H.%M.%S"))) quit() if response == None or response == "": # Make sure response isn't nothing continue else: # ---------------------------------------------------------- # Send the message # ---------------------------------------------------------- ret_msg = yield from messages.sendMsg(websocket, response) ret_msg = json.loads(ret_msg) # Convert response to JSON print("ret_msg:\t", ret_msg) print("Response:\t", ret_msg["data"]) if "error" in ret_msg: if ret_msg["error"] != None: print("Error:\t", ret_msg["error"]) print("Code:\t", ret_msg["id"])
def controlChannel(): global user_id global websocket addr = config['BEAM_ADDR'] session = requests.Session() loginRet = session.post( addr + '/users/login', data=_get_auth_body() ) if loginRet.status_code != requests.codes.ok: print (loginRet.text) user_id = loginRet.json()['id'] channel = config['CHANNEL'] control_ret = session.get( addr + '/chats/22085' ) if control_ret.status_code != requests.codes.ok: print ('ERROR!') print ('Message:\t',control_ret.json()) quit() chat_details_control = control_ret.json() endpoint_control = chat_details_control['endpoints'][0] authkey_control = chat_details_control['authkey'] websocket = yield from websockets.connect(endpoint_control) content = [22085, user_id, authkey_control] ret = yield from messages.sendMsg(websocket, content, is_auth=True) ret = ret.split('"id"')[0][:-1] + "}" ret = json.loads(ret) if ret["error"] != None: print (ret["error"]) print ("Error - Non-None error returned!") quit() while True: result = yield from websocket.recv() if type(result) == None: next result = json.loads(result) if result['event'] == 'ChatMessage': print ('Control channel:') result = result['data'] msg = result['message']['message'][0] print ('User:\t\t',result['user_name'], '-', result['user_id']) print ('Message:\t', msg['data'], end='\n\n')