Ghosted: add max inactive time for dms (#897)

This commit is contained in:
Key 2026-03-09 21:36:34 +00:00 • committed by GitHub
parent fe8ffe1916
commit 6eff813522
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 18 additions and 3 deletions

View file

@ -98,6 +98,9 @@ export function Boo({ channel }: { channel: Channel; }) {
});
const [isCleared, setIsCleared] = useState(false);
const lastMessageTimestampMs = lastMessage ? new Date(lastMessage.timestamp).getTime() : 0;
const isInactive = !!lastMessage && settings.store.maxInactiveTimeMs > 0 && Number.isFinite(lastMessageTimestampMs) && Date.now() - lastMessageTimestampMs > settings.store.maxInactiveTimeMs;
useEffect(() => {
if (!lastMessage || !currentUserId) return;
@ -167,7 +170,7 @@ export function Boo({ channel }: { channel: Channel; }) {
}
// if exempted or bot (if setting enabled), remove from ghost tracking
if (isExempted || (settings.store.ignoreBots && lastMessage.author.bot)) {
if (isExempted || (settings.store.ignoreBots && lastMessage.author.bot) || isInactive) {
if (countedChannels.has(id)) {
countedChannels.delete(id);
setBooCount(getBooCount() - 1);
@ -187,9 +190,9 @@ export function Boo({ channel }: { channel: Channel; }) {
setBooCount(getBooCount() + 1);
}
}
}, [state.isCurrentUser, state.isDataProcessed, id, lastMessage?.id]);
}, [state.isCurrentUser, state.isDataProcessed, id, lastMessage?.id, isInactive]);
if (!state.isDataProcessed || !currentUserId || !lastMessage || state.isCurrentUser || isChannelExempted(channel) || isCleared || (settings.store.ignoreBots && lastMessage.author.bot))
if (!state.isDataProcessed || !currentUserId || !lastMessage || state.isCurrentUser || isChannelExempted(channel) || isCleared || (settings.store.ignoreBots && lastMessage.author.bot) || isInactive)
return null;
if (!settings.store.showDmIcons) return null;

View file

@ -52,6 +52,18 @@ export const settings = definePluginSettings({
description: "Ignore DMs from bots",
default: true,
restartNeeded: false
},
maxInactiveTimeMs: {
type: OptionType.SELECT,
description: "Only ghost DMs active within this timeframe",
options: [
{ label: "No limit", value: 0, default: true },
{ label: "1 hour", value: 60 * 60 * 1000 },
{ label: "1 day", value: 24 * 60 * 60 * 1000 },
{ label: "1 week", value: 7 * 24 * 60 * 60 * 1000 },
{ label: "1 month", value: 30 * 24 * 60 * 60 * 1000 },
],
restartNeeded: false
}
});