matrix-python-sdk/samples/SimpleChatClient.py

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)