Add support for multiple texting numbers

master
Skylar Ittner 3 years ago
parent 3583f61fd7
commit 5cec22b2e8

@ -32,6 +32,20 @@ logger.info("Log initialized.");
var initialsynccomplete = false;
/**
* From https://github.com/stevekinney/node-phone-formatter
* @param {type} phoneNumber
* @param {type} formatString
* @param {type} options
* @returns {unresolved}
*/
function formatPhoneNumber(phoneNumber, formatString) {
for (var i = 0, l = phoneNumber.length; i < l; i++) {
formatString = formatString.replace("N", phoneNumber[i]);
}
return formatString;
}
function checkSMS() {
logger.debug("Checking SMS");
@ -59,7 +73,7 @@ function checkSMS() {
var msg = messages[i];
if (settings.smsonlyto.length > 0 && settings.smsonlyto.indexOf(msg.to) != -1) {
logger.info("Received SMS from " + msg.from + " for " + msg.to + ": " + msg.body);
createOrJoinSMSRoom(msg.from, function (roomid) {
createOrJoinSMSRoom(msg.from, msg.to, function (roomid) {
sendMatrix(roomid, msg.body, msg.media);
});
} else {
@ -83,13 +97,15 @@ function checkSMS() {
/**
* Join or create+join a room with alias #SMS_{tel}. If already joined, do nothing.
* @param {string} tel
* @param {string} ournumber the phone number Matrix messages will be sent from for this room
* @param {function} callback function with the room ID as an argument.
* @returns {undefined}
*/
function createOrJoinSMSRoom(tel, callback) {
logger.debug("Checking if room #SMS_" + tel + ":" + settings.matrixdomain + " exists.");
client.getRoomIdForAlias("#SMS_" + tel + ":" + settings.matrixdomain).then((res) => {
logger.debug("Room #SMS_" + tel + ":" + settings.matrixdomain + " exists!");
function createOrJoinSMSRoom(tel, ournumber, callback) {
var roomName = "#SMS_" + tel + "_" + ournumber + ":" + settings.matrixdomain;
logger.debug("Checking if room " + roomName + " exists.");
client.getRoomIdForAlias(roomName).then((res) => {
logger.debug("Room " + roomName + " exists!");
var inRoom = false;
var rooms = client.getRooms();
for (var i = 0; i < rooms.length; i++) {
@ -100,31 +116,31 @@ function createOrJoinSMSRoom(tel, callback) {
}
if (inRoom) {
// we're already in the room, do nothing
logger.debug("Room #SMS_" + tel + ":" + settings.matrixdomain + " already joined.");
logger.debug("Room " + roomName + " already joined.");
callback(res.room_id);
} else {
// not in the room, join it
client.joinRoom(res.room_id).then((room) => {
logger.debug("Room #SMS_" + tel + ":" + settings.matrixdomain + " joined.");
logger.debug("Room " + roomName + " joined.");
callback(room.room_id);
});
}
}).catch((err) => {
// room doesn't exist, create it
//logger.debug(err);
logger.debug("Room #SMS_" + tel + ":" + settings.matrixdomain + " does not exist. Creating it now.");
logger.debug("Room " + roomName + " does not exist. Creating it now.");
client.createRoom({
room_alias_name: "SMS_" + tel,
room_alias_name: "SMS_" + tel + "_" + ournumber,
visibility: "private",
invite: settings.inviteusers,
name: "SMS: " + tel,
topic: "SMS conversation with " + tel
name: formatPhoneNumber(tel),
topic: "SMS conversation with " + tel + " (using " + ournumber + ")"
}).then((room) => {
logger.debug("Room #SMS_" + tel + ":" + settings.matrixdomain + " created with ID " + room.room_id);
logger.debug("Room" + roomName + " created with ID " + room.room_id);
// The first message or two we send doesn't go through unless we do this.
// It just spits out "Error sending event M_FORBIDDEN: Unknown room" instead.
createOrJoinSMSRoom(tel, callback);
createOrJoinSMSRoom(tel, ournumber, callback);
});
});
}
@ -316,15 +332,23 @@ client.login("m.login.password", {"user": settings.matrixuser, "password": setti
if (event.getContent().body.startsWith("!sms")) {
// capture command to start room for new number
const matches = event.getContent().body.match(/([1-9]?[0-9]{10})/g);
if (matches.length == 1) {
if (matches.length == 1 || matches.length == 2) {
var tel = matches[0];
var ournumber = settings.smsfrom;
if (tel.length == 10) {
// make it the full number
tel = "1" + tel;
}
if (matches.length == 2) {
ournumber = matches[1];
if (ournumber.length == 10) {
// make it the full number
ournumber = "1" + ournumber;
}
}
logger.info("Got request to start new SMS conversation with " + tel + " from " + event.getSender() + ".");
sendMatrixNotice(event.getRoomId(), "Starting new conversation with " + tel);
createOrJoinSMSRoom(tel, function () {
createOrJoinSMSRoom(tel, ournumber, function () {
return;
});
}

Loading…
Cancel
Save