85 lines
2.3 KiB
Python
Executable File
85 lines
2.3 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
|
|
# A simple chat client for matrix.
|
|
# This sample will allow you to connect to a room, and send/recieve messages.
|
|
# Args: host:port username password room
|
|
# Error Codes:
|
|
# 1 - Unknown problem has occured
|
|
# 2 - Could not find the server.
|
|
# 3 - Bad URL Format.
|
|
# 4 - Bad username/password.
|
|
# 11 - Wrong room format.
|
|
# 12 - Couldn't find room.
|
|
|
|
import sys
|
|
import samples_common # Common bits used between samples
|
|
import logging
|
|
|
|
from matrix_client.client import MatrixClient
|
|
from matrix_client.api import MatrixRequestError
|
|
from requests.exceptions import MissingSchema
|
|
|
|
|
|
# Called when a message is recieved.
|
|
def on_message(room, event):
|
|
if event['type'] == "m.room.member":
|
|
if event['membership'] == "join":
|
|
print("{0} joined".format(event['content']['displayname']))
|
|
elif event['type'] == "m.room.message":
|
|
if event['content']['msgtype'] == "m.text":
|
|
print("{0}: {1}".format(event['sender'], event['content']['body']))
|
|
else:
|
|
print(event['type'])
|
|
|
|
|
|
def main(host, username, password, room_id_alias):
|
|
client = MatrixClient(host)
|
|
|
|
try:
|
|
client.login(username, password)
|
|
except MatrixRequestError as e:
|
|
print(e)
|
|
if e.code == 403:
|
|
print("Bad username or password.")
|
|
sys.exit(4)
|
|
else:
|
|
print("Check your sever details are correct.")
|
|
sys.exit(2)
|
|
except MissingSchema as e:
|
|
print("Bad URL format.")
|
|
print(e)
|
|
sys.exit(3)
|
|
|
|
try:
|
|
room = client.join_room(room_id_alias)
|
|
except MatrixRequestError as e:
|
|
print(e)
|
|
if e.code == 400:
|
|
print("Room ID/Alias in the wrong format")
|
|
sys.exit(11)
|
|
else:
|
|
print("Couldn't find room.")
|
|
sys.exit(12)
|
|
|
|
room.add_listener(on_message)
|
|
client.start_listener_thread()
|
|
|
|
while True:
|
|
msg = samples_common.get_input()
|
|
if msg == "/quit":
|
|
break
|
|
else:
|
|
room.send_text(msg)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
logging.basicConfig(level=logging.WARNING)
|
|
host, username, password = samples_common.get_user_details(sys.argv)
|
|
|
|
if len(sys.argv) > 4:
|
|
room_id_alias = sys.argv[4]
|
|
else:
|
|
room_id_alias = samples_common.get_input("Room ID/Alias: ")
|
|
|
|
main(host, username, password, room_id_alias)
|