Add support for incoming REDACT

This does not include support for redacting messages, only reading
incoming REDACT messages.

See: https://github.com/ircv3/ircv3-specifications/pull/524
This commit is contained in:
delthas 2025-02-05 17:51:06 +01:00 committed by Simon Ser
parent ca0cfdcc28
commit 7dd21177bc
4 changed files with 21 additions and 4 deletions

View File

@ -762,7 +762,7 @@ export default class App extends Component {
// Open a new buffer if the message doesn't come from me or is a
// self-message
if ((!client.isMyNick(msg.prefix.name) || client.isMyNick(bufName)) && (msg.command !== "PART" && msg.comand !== "QUIT" && msg.command !== irc.RPL_MONONLINE && msg.command !== irc.RPL_MONOFFLINE)) {
if ((!client.isMyNick(msg.prefix.name) || client.isMyNick(bufName)) && (msg.command !== "PART" && msg.command !== "QUIT" && msg.command !== irc.RPL_MONONLINE && msg.command !== irc.RPL_MONOFFLINE)) {
this.createBuffer(serverID, bufName);
}
@ -1075,6 +1075,7 @@ export default class App extends Component {
case "ACK":
case "BOUNCER":
case "MARKREAD":
case "REDACT":
// Ignore these
return [];
default:

View File

@ -94,7 +94,7 @@ function canFoldMessage(msg) {
class LogLine extends Component {
shouldComponentUpdate(nextProps) {
return this.props.message !== nextProps.message;
return this.props.message !== nextProps.message || this.props.redacted !== nextProps.redacted;
}
render() {
@ -143,13 +143,18 @@ class LogLine extends Component {
`;
}
} else {
lineClass = "talk";
let prefix = "<", suffix = ">";
if (msg.command === "NOTICE") {
lineClass += " notice";
prefix = suffix = "-";
}
content = html`<span class="nick-caret">${prefix}</span>${createNick(msg.prefix.name)}<span class="nick-caret">${suffix}</span> ${linkify(stripANSI(text), onChannelClick)}`;
if (this.props.redacted) {
content = html`<i>This message has been deleted.</i>`;
} else {
content = html`${linkify(stripANSI(text), onChannelClick)}`;
lineClass += " talk";
}
content = html`<span class="nick-caret">${prefix}</span>${createNick(msg.prefix.name)}<span class="nick-caret">${suffix}</span> ${content}`;
}
let allowedPrefixes = server.statusMsg;
@ -710,6 +715,7 @@ export default class Buffer extends Component {
message=${msg}
buffer=${buf}
server=${server}
redacted=${buf.redacted.has(msg.tags.msgid)}
onChannelClick=${onChannelClick}
onNickClick=${onNickClick}
onVerifyClick=${onVerifyClick}

View File

@ -21,6 +21,7 @@ const permanentCaps = [
"draft/account-registration",
"draft/chathistory",
"draft/extended-monitor",
"draft/message-redaction",
"draft/read-marker",
"soju.im/bouncer-networks",

View File

@ -361,6 +361,7 @@ export const State = {
hasInitialWho: false, // if channel
members: new irc.CaseMapMap(null, client.cm), // if channel
messages: [],
redacted: new Set(),
unread: Unread.NONE,
prevReadReceipt: null,
});
@ -665,6 +666,14 @@ export const State = {
return { members };
});
case "REDACT":
target = msg.params[0];
if (client.isMyNick(target)) {
target = msg.prefix.name;
}
return updateBuffer(target, (buf) => {
return { redacted: new Set(buf.redacted).add(msg.params[1]) };
});
case irc.RPL_MONONLINE:
case irc.RPL_MONOFFLINE:
targets = msg.params[1].split(",");