You've already forked matrix-js-sdk
mirror of
https://github.com/matrix-org/matrix-js-sdk.git
synced 2025-08-06 12:02:40 +03:00
183 lines
5.2 KiB
JavaScript
183 lines
5.2 KiB
JavaScript
"use strict";
|
|
|
|
var myUserId = "@example:localhost";
|
|
var myAccessToken = "QGV4YW1wbGU6bG9jYWxob3N0.qPEvLuYfNBjxikiCjP";
|
|
var sdk = require("matrix-js-sdk");
|
|
var matrixClient = sdk.createClient({
|
|
baseUrl: "http://localhost:8008",
|
|
accessToken: myAccessToken,
|
|
userId: myUserId
|
|
});
|
|
|
|
// Data structures
|
|
var roomList = [];
|
|
var viewingRoom = null;
|
|
var numMessagesToShow = 20;
|
|
|
|
// Reading from stdin
|
|
var readline = require("readline");
|
|
var rl = readline.createInterface({
|
|
input: process.stdin,
|
|
output: process.stdout,
|
|
terminal: false
|
|
});
|
|
rl.on('line', function(line) {
|
|
if (line.indexOf("/enter ") === 0 && !viewingRoom) {
|
|
var roomIndex = line.split(" ")[1];
|
|
viewingRoom = roomList[roomIndex];
|
|
if (viewingRoom.getMember(myUserId).membership === "invite") {
|
|
// join the room first
|
|
matrixClient.joinRoom(viewingRoom.roomId).done(function() {
|
|
printMessages();
|
|
}, function(err) {
|
|
console.log("Error: %s", err);
|
|
});
|
|
}
|
|
else {
|
|
printMessages();
|
|
}
|
|
}
|
|
else if (line === "/exit" && viewingRoom) {
|
|
viewingRoom = null;
|
|
printRoomList();
|
|
}
|
|
else if (line === "/members" && viewingRoom) {
|
|
printMemberList();
|
|
}
|
|
else if (line === "/help") {
|
|
printHelp();
|
|
}
|
|
else if (viewingRoom) {
|
|
matrixClient.sendTextMessage(viewingRoom.roomId, line).done(function() {
|
|
console.log('\x1B[2J'); // clear console
|
|
printMessages();
|
|
}, function(err) {
|
|
console.log("Error: %s", err);
|
|
});
|
|
}
|
|
});
|
|
// ==== END User input
|
|
|
|
// show the room list after syncing.
|
|
matrixClient.on("syncComplete", function() {
|
|
roomList = matrixClient.getRooms();
|
|
printRoomList();
|
|
printHelp();
|
|
});
|
|
|
|
// print incoming messages.
|
|
matrixClient.on("Room.timeline", function(event, room, toStartOfTimeline) {
|
|
if (toStartOfTimeline) {
|
|
return; // don't print paginated results
|
|
}
|
|
if (!viewingRoom || viewingRoom.roomId !== room.roomId) {
|
|
return; // not viewing a room or viewing the wrong room.
|
|
}
|
|
printLine(event);
|
|
});
|
|
|
|
function printRoomList() {
|
|
console.log("Room List:");
|
|
for (var i = 0; i < roomList.length; i++) {
|
|
console.log(
|
|
"[%s] %s (%s members)",
|
|
i, roomList[i].name, roomList[i].getJoinedMembers().length
|
|
);
|
|
}
|
|
}
|
|
|
|
function printHelp() {
|
|
console.log("Global commands:");
|
|
console.log(" '/help' : Show this help.");
|
|
console.log("Room list index commands:");
|
|
console.log(" '/enter <index>' Enter a room, e.g. '/enter 5'");
|
|
console.log("Room commands:");
|
|
console.log(" '/exit' Return to the room list index.");
|
|
console.log(" '/members' Show the room member list.");
|
|
}
|
|
|
|
function printMessages() {
|
|
if (!viewingRoom) {
|
|
printRoomList();
|
|
return;
|
|
}
|
|
console.log('\x1B[2J'); // clear console
|
|
var mostRecentMessages = viewingRoom.timeline.slice(numMessagesToShow * -1);
|
|
for (var i = 0; i < mostRecentMessages.length; i++) {
|
|
printLine(mostRecentMessages[i]);
|
|
}
|
|
}
|
|
|
|
function printMemberList() {
|
|
if (!viewingRoom) {
|
|
printRoomList();
|
|
return;
|
|
}
|
|
var members = viewingRoom.currentState.getMembers();
|
|
// sorted based on name.
|
|
members.sort(function(a, b) {
|
|
if (a.name > b.name) {
|
|
return -1;
|
|
}
|
|
if (a.name < b.name) {
|
|
return 1;
|
|
}
|
|
return 0;
|
|
});
|
|
console.log("Membership list for room \"%s\"", viewingRoom.name);
|
|
console.log(new Array(viewingRoom.name.length + 28).join("-"));
|
|
viewingRoom.currentState.getMembers().forEach(function(member) {
|
|
if (!member.membership) {
|
|
return;
|
|
}
|
|
var membershipWithPadding = (
|
|
member.membership + new Array(10 - member.membership.length).join(" ")
|
|
);
|
|
console.log(
|
|
"%s :: %s (%s)", membershipWithPadding, member.name,
|
|
(member.userId === myUserId ? "Me" : member.userId)
|
|
);
|
|
});
|
|
}
|
|
|
|
function printLine(event) {
|
|
var name = event.sender ? event.sender.name : event.getSender();
|
|
var time = new Date(
|
|
event.getTs()
|
|
).toISOString().replace(/T/, ' ').replace(/\..+/, '');
|
|
var separator = "<<<";
|
|
if (event.getSender() === myUserId) {
|
|
name = "Me";
|
|
separator = ">>>";
|
|
}
|
|
var body = "";
|
|
|
|
var maxNameWidth = 15;
|
|
if (name.length > maxNameWidth) {
|
|
name = name.substr(0, maxNameWidth-1) + "\u2026";
|
|
}
|
|
|
|
if (event.getType() === "m.room.message") {
|
|
body = event.getContent().body;
|
|
}
|
|
else if (event.isState()) {
|
|
var stateName = event.getType();
|
|
if (event.getStateKey().length > 0) {
|
|
stateName += " ("+event.getStateKey()+")";
|
|
}
|
|
body = (
|
|
"[State: "+stateName+" updated to: "+JSON.stringify(event.getContent())+"]"
|
|
);
|
|
separator = "---";
|
|
}
|
|
else {
|
|
// random message event
|
|
body = (
|
|
"[Message: "+event.getType()+" Content: "+JSON.stringify(event.getContent())+"]"
|
|
);
|
|
separator = "---";
|
|
}
|
|
console.log("[%s] %s %s %s", time, name, separator, body);
|
|
}
|
|
|
|
matrixClient.startClient(numMessagesToShow); // messages for each room.
|