Add support for multiple texting numbers
This commit is contained in:
parent
3583f61fd7
commit
5cec22b2e8
54
main.js
54
main.js
@ -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…
x
Reference in New Issue
Block a user