forwarder: implement reply on IRC side
This commit is contained in:
parent
086792e281
commit
a82d33f7a8
29
forwarder.js
29
forwarder.js
|
@ -102,7 +102,7 @@ module.exports = class Forwarder {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
onMatrixMessage(event, room, toStartOfTimeline) {
|
async onMatrixMessage(event, room, toStartOfTimeline) {
|
||||||
this.clientMatrix.sendReadReceipt(event);
|
this.clientMatrix.sendReadReceipt(event);
|
||||||
if (toStartOfTimeline) {
|
if (toStartOfTimeline) {
|
||||||
return; // Ignore pagniation
|
return; // Ignore pagniation
|
||||||
|
@ -124,6 +124,28 @@ module.exports = class Forwarder {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let replyUsername = null;
|
||||||
|
if (content['m.relates_to'] && content['m.relates_to']['m.in_reply_to']) {
|
||||||
|
let replyEvId = content['m.relates_to']['m.in_reply_to']['event_id'];
|
||||||
|
try {
|
||||||
|
let tl = await this.clientMatrix.getEventTimeline(room.getUnfilteredTimelineSet(), replyEvId);
|
||||||
|
let replyEv = tl.getEvents().filter((v) => v.getId() == replyEvId);
|
||||||
|
if (replyEv.length > 0) {
|
||||||
|
replyUsername = replyEv[0].sender.name;
|
||||||
|
if (replyEv[0].getContent()['net.typeblog.i2m.irc_nick']) {
|
||||||
|
replyUsername = replyEv[0].getContent()['net.typeblog.i2m.irc_nick'];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (err) {
|
||||||
|
console.log(err);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
let replyTxt = "";
|
||||||
|
if (replyUsername) {
|
||||||
|
replyTxt = replyUsername + ": "
|
||||||
|
}
|
||||||
|
|
||||||
let msgTxt = null;
|
let msgTxt = null;
|
||||||
switch (event.getType()) {
|
switch (event.getType()) {
|
||||||
case "m.sticker":
|
case "m.sticker":
|
||||||
|
@ -138,7 +160,8 @@ module.exports = class Forwarder {
|
||||||
msgTxt = `${content.body} ${this.clientMatrix.mxcUrlToHttp(content.url)}`;
|
msgTxt = `${content.body} ${this.clientMatrix.mxcUrlToHttp(content.url)}`;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
msgTxt = content.body;
|
// Get rid of the reply quote generated by Element client
|
||||||
|
msgTxt = content.body.replace(/> <@(.*):(.*)> (.*)\n\n/, "");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -154,7 +177,7 @@ module.exports = class Forwarder {
|
||||||
// Special format for emote
|
// Special format for emote
|
||||||
this.clientIRC.say(this.mappingM2I[room.roomId], `* ${name} ${msgTxt}`);
|
this.clientIRC.say(this.mappingM2I[room.roomId], `* ${name} ${msgTxt}`);
|
||||||
} else {
|
} else {
|
||||||
this.clientIRC.say(this.mappingM2I[room.roomId], `[${name}] ${msgTxt}`);
|
this.clientIRC.say(this.mappingM2I[room.roomId], `[${name}] ${replyTxt}${msgTxt}`);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
4
index.js
4
index.js
|
@ -33,7 +33,9 @@ function connectIrc(config, callback) {
|
||||||
}
|
}
|
||||||
|
|
||||||
function connectMatrix(config, callback) {
|
function connectMatrix(config, callback) {
|
||||||
let client = matrix.createClient(config.matrix);
|
let client = matrix.createClient(Object.assign(config.matrix, {
|
||||||
|
timelineSupport: true
|
||||||
|
}));
|
||||||
let myCallback = (state) => {
|
let myCallback = (state) => {
|
||||||
switch (state) {
|
switch (state) {
|
||||||
case "PREPARED":
|
case "PREPARED":
|
||||||
|
|
Loading…
Reference in New Issue