Hopefully catch errors

This commit is contained in:
Skylar Ittner 2023-09-05 21:50:26 -06:00
parent b9326e51e4
commit 5d3f6c226c

296
main.js
View File

@ -482,102 +482,162 @@ client.login("m.login.password", {"user": settings.matrixuser, "password": setti
} }
}); });
client.on("Room.timeline", function (event, room) { client.on("Room.timeline", function (event, room) {
if (!initialsynccomplete) { try {
return; // ignore anything while we were offline if (!initialsynccomplete) {
} return; // ignore anything while we were offline
if (event.getType() !== "m.room.message") { }
return; // only use messages if (event.getType() !== "m.room.message") {
} return; // only use messages
if (client.getUserId() == event.getSender()) { }
return; // skip own messages to prevent loop if (client.getUserId() == event.getSender()) {
} return; // skip own messages to prevent loop
if (event.getContent() == null || typeof event.getContent().body == "undefined" || event.getContent().body == null) { }
// Apparently this can happen? if (event.getContent() == null || typeof event.getContent().body == "undefined" || event.getContent().body == null) {
return; // Apparently this can happen?
}
if (event.getContent().body.toLowerCase().startsWith("!sms")) {
// capture command to start room for new number
const matches = event.getContent().body.match(/([1-9]?[0-9]{10})/g);
if (matches == null) {
return; return;
} }
if (matches.length == 1 || matches.length == 2) {
var tel = matches[0]; if (event.getContent().body.toLowerCase().startsWith("!sms")) {
var ournumber = settings.smsfrom; // capture command to start room for new number
if (tel.length == 10) { const matches = event.getContent().body.match(/([1-9]?[0-9]{10})/g);
// make it the full number if (matches == null) {
tel = "1" + tel; return;
} }
if (matches.length == 2) { if (matches.length == 1 || matches.length == 2) {
ournumber = matches[1]; var tel = matches[0];
if (ournumber.length == 10) { var ournumber = settings.smsfrom;
if (tel.length == 10) {
// make it the full number // make it the full number
ournumber = "1" + ournumber; 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 + " using " + ournumber + " from " + event.getSender() + ".");
sendMatrixNotice(event.getRoomId(), "Starting conversation with " + tel);
createOrJoinSMSRoom(tel, ournumber, function (roomid) {
//client.setRoomTag(roomid, "u.matrix-bridge-voxtelesys-sms", {tel: tel, ournumber: ournumber});
});
} }
logger.info("Got request to start new SMS conversation with " + tel + " using " + ournumber + " from " + event.getSender() + "."); return;
sendMatrixNotice(event.getRoomId(), "Starting conversation with " + tel); } else if (event.getContent().body.toLowerCase().replace(/\s/g, "").startsWith("!sms")) {
createOrJoinSMSRoom(tel, ournumber, function (roomid) { sendMatrixNotice(event.getRoomId(), "Malformed command detected, ignoring.");
//client.setRoomTag(roomid, "u.matrix-bridge-voxtelesys-sms", {tel: tel, ournumber: ournumber}); sendMatrixNotice(event.getRoomId(), "Hint: there aren't supposed to be any spaces before or in the \"!sms\" part.");
}); return;
} }
return;
} else if (event.getContent().body.toLowerCase().replace(/\s/g, "").startsWith("!sms")) {
sendMatrixNotice(event.getRoomId(), "Malformed command detected, ignoring.");
sendMatrixNotice(event.getRoomId(), "Hint: there aren't supposed to be any spaces before or in the \"!sms\" part.");
return;
}
if (event.getContent().body.toLowerCase().startsWith("!fixusers")) { if (event.getContent().body.toLowerCase().startsWith("!fixusers")) {
sendMatrixNotice(event.getRoomId(), "Inviting missing users across all SMS chats. You may need to run this command several times, there's a server limit to how many invites can be sent at once."); sendMatrixNotice(event.getRoomId(), "Inviting missing users across all SMS chats. You may need to run this command several times, there's a server limit to how many invites can be sent at once.");
client.getJoinedRooms().then(function (rooms) { client.getJoinedRooms().then(function (rooms) {
var roomlist = rooms.joined_rooms; var roomlist = rooms.joined_rooms;
for (var i = 0; i < roomlist.length; i++) { for (var i = 0; i < roomlist.length; i++) {
(function (roomid) { (function (roomid) {
client.getJoinedRoomMembers(roomid).then(function (joined) { client.getJoinedRoomMembers(roomid).then(function (joined) {
var members = Object.keys(joined.joined); var members = Object.keys(joined.joined);
for (var j = 0; j < settings.inviteusers.length; j++) { for (var j = 0; j < settings.inviteusers.length; j++) {
if (members.indexOf(settings.inviteusers[j]) == -1) { if (members.indexOf(settings.inviteusers[j]) == -1) {
logger.info("Inviting missing user " + settings.inviteusers[j] + " to room " + roomid); logger.info("Inviting missing user " + settings.inviteusers[j] + " to room " + roomid);
client.invite(roomid, settings.inviteusers[j]); client.invite(roomid, settings.inviteusers[j]);
}
} }
} });
}); })(roomlist[i]);
})(roomlist[i]); }
} });
});
return; return;
} else if (event.getContent().body.toLowerCase().replace(/\s/g, "").startsWith("!fixusers")) { } else if (event.getContent().body.toLowerCase().replace(/\s/g, "").startsWith("!fixusers")) {
sendMatrixNotice(event.getRoomId(), "Malformed command detected, ignoring."); sendMatrixNotice(event.getRoomId(), "Malformed command detected, ignoring.");
return; return;
} }
if (event.getContent().body.toLowerCase().replace(/\s/g, "").startsWith("!")) { if (event.getContent().body.toLowerCase().replace(/\s/g, "").startsWith("!")) {
sendMatrixNotice(event.getRoomId(), "I'm sorry, but my programming forbids me from sending text messages that start with `!`."); sendMatrixNotice(event.getRoomId(), "I'm sorry, but my programming forbids me from sending text messages that start with `!`.");
return; return;
} }
var matches = room.name.match(/SMS_([1-9][0-9]+)(?:_([1-9][0-9]+))?/g); var matches = room.name.match(/SMS_([1-9][0-9]+)(?:_([1-9][0-9]+))?/g);
console.log(event.getRoomId()); console.log(event.getRoomId());
if (matches == null || (matches.length != 1 && matches.length != 2)) { if (matches == null || (matches.length != 1 && matches.length != 2)) {
client.getRoomTags(event.getRoomId()).then((response) => { client.getRoomTags(event.getRoomId()).then((response) => {
console.log(response); console.log(response);
if (typeof response.tags["u.matrix-bridge-voxtelesys-sms"] != "undefined") { if (typeof response.tags["u.matrix-bridge-voxtelesys-sms"] != "undefined") {
var tel = response.tags["u.matrix-bridge-voxtelesys-sms"].tel; var tel = response.tags["u.matrix-bridge-voxtelesys-sms"].tel;
var from = response.tags["u.matrix-bridge-voxtelesys-sms"].ournumber; var from = response.tags["u.matrix-bridge-voxtelesys-sms"].ournumber;
logger.info("Got message for " + tel + " from " + event.getSender() + ", relaying to " + from + "."); logger.info("Got message for " + tel + " from " + event.getSender() + ", relaying to " + from + ".");
switch (event.getContent().msgtype) {
case "m.image":
case "m.file":
case "m.video":
sendMMS(
tel,
from,
event.getContent().url,
event.getContent().info.mimetype,
function () {
client.sendReadReceipt(event, "m.read");
});
break;
case "m.text":
default:
sendSMS(
tel,
from,
event.getContent().body,
function () {
client.sendReadReceipt(event, "m.read");
});
break;
}
} else if (typeof response.tags["com.netsyms.matrix-bridge-voxtelesys.sms"] != "undefined") {
var tel = response.tags["com.netsyms.matrix-bridge-voxtelesys.sms"].tel;
var from = response.tags["com.netsyms.matrix-bridge-voxtelesys.sms"].ournumber;
client.setRoomTag(event.getRoomId(), "u.matrix-bridge-voxtelesys-sms", {tel: tel, ournumber: from, order: 0.5});
logger.info("Got message for " + tel + " from " + event.getSender() + ", relaying to " + from + ".");
switch (event.getContent().msgtype) {
case "m.image":
case "m.file":
case "m.video":
sendMMS(
tel,
from,
event.getContent().url,
event.getContent().info.mimetype,
function () {
client.sendReadReceipt(event, "m.read");
});
break;
case "m.text":
default:
sendSMS(
tel,
from,
event.getContent().body,
function () {
client.sendReadReceipt(event, "m.read");
});
break;
}
} else {
console.log(response.tags);
sendMatrixNotice(room.roomId, "Error: couldn't determine correct number to send SMS from.");
}
});
} else {
if (matches.length == 1) {
var tel = matches[0];
logger.info("Got message for " + tel + " from " + event.getSender() + ", relaying.");
switch (event.getContent().msgtype) { switch (event.getContent().msgtype) {
case "m.image": case "m.image":
case "m.file": case "m.file":
case "m.video": case "m.video":
sendMMS( sendMMS(tel, settings.smsfrom, event.getContent().url,
tel,
from,
event.getContent().url,
event.getContent().info.mimetype, event.getContent().info.mimetype,
function () { function () {
client.sendReadReceipt(event, "m.read"); client.sendReadReceipt(event, "m.read");
@ -585,28 +645,20 @@ client.login("m.login.password", {"user": settings.matrixuser, "password": setti
break; break;
case "m.text": case "m.text":
default: default:
sendSMS( sendSMS(tel, settings.smsfrom, event.getContent().body, function () {
tel, client.sendReadReceipt(event, "m.read");
from, });
event.getContent().body,
function () {
client.sendReadReceipt(event, "m.read");
});
break; break;
} }
} else if (typeof response.tags["com.netsyms.matrix-bridge-voxtelesys.sms"] != "undefined") { } else if (matches.length == 2) {
var tel = response.tags["com.netsyms.matrix-bridge-voxtelesys.sms"].tel; var tel = matches[0];
var from = response.tags["com.netsyms.matrix-bridge-voxtelesys.sms"].ournumber; var from = matches[1];
client.setRoomTag(event.getRoomId(), "u.matrix-bridge-voxtelesys-sms", {tel: tel, ournumber: from, order: 0.5});
logger.info("Got message for " + tel + " from " + event.getSender() + ", relaying to " + from + "."); logger.info("Got message for " + tel + " from " + event.getSender() + ", relaying to " + from + ".");
switch (event.getContent().msgtype) { switch (event.getContent().msgtype) {
case "m.image": case "m.image":
case "m.file": case "m.file":
case "m.video": case "m.video":
sendMMS( sendMMS(tel, from, event.getContent().url,
tel,
from,
event.getContent().url,
event.getContent().info.mimetype, event.getContent().info.mimetype,
function () { function () {
client.sendReadReceipt(event, "m.read"); client.sendReadReceipt(event, "m.read");
@ -614,63 +666,15 @@ client.login("m.login.password", {"user": settings.matrixuser, "password": setti
break; break;
case "m.text": case "m.text":
default: default:
sendSMS( sendSMS(tel, settings.smsfrom, event.getContent().body, function () {
tel, client.sendReadReceipt(event, "m.read");
from, });
event.getContent().body,
function () {
client.sendReadReceipt(event, "m.read");
});
break; break;
} }
} else {
console.log(response.tags);
sendMatrixNotice(room.roomId, "Error: couldn't determine correct number to send SMS from.");
}
});
} else {
if (matches.length == 1) {
var tel = matches[0];
logger.info("Got message for " + tel + " from " + event.getSender() + ", relaying.");
switch (event.getContent().msgtype) {
case "m.image":
case "m.file":
case "m.video":
sendMMS(tel, settings.smsfrom, event.getContent().url,
event.getContent().info.mimetype,
function () {
client.sendReadReceipt(event, "m.read");
});
break;
case "m.text":
default:
sendSMS(tel, settings.smsfrom, event.getContent().body, function () {
client.sendReadReceipt(event, "m.read");
});
break;
}
} else if (matches.length == 2) {
var tel = matches[0];
var from = matches[1];
logger.info("Got message for " + tel + " from " + event.getSender() + ", relaying to " + from + ".");
switch (event.getContent().msgtype) {
case "m.image":
case "m.file":
case "m.video":
sendMMS(tel, from, event.getContent().url,
event.getContent().info.mimetype,
function () {
client.sendReadReceipt(event, "m.read");
});
break;
case "m.text":
default:
sendSMS(tel, settings.smsfrom, event.getContent().body, function () {
client.sendReadReceipt(event, "m.read");
});
break;
} }
} }
} catch (ex) {
logger.error("Error handling incoming event: " + ex);
} }
}); });
}); });