fix discord bot pings and some of the session spam

This commit is contained in:
legop3
2025-11-27 02:01:31 -05:00
parent 6c43bcbf8d
commit 63871ccd17
3 changed files with 41 additions and 5 deletions
+10 -3
View File
@@ -91,11 +91,12 @@ async function fetchChannel(id) {
return null;
}
async function sendToChannel(id, content, options = {}, allowedMentions = { parse: [] }) {
async function sendToChannel(id, content, options = {}, allowedMentions = { parse: [] }, sanitizeContent = true) {
const channel = await fetchChannel(id);
if (!channel) return;
try {
await channel.send({ content: sanitizeMentions(content), allowedMentions, ...options });
const messageContent = sanitizeContent ? sanitizeMentions(content) : content;
await channel.send({ content: messageContent, allowedMentions, ...options });
} catch (err) {
logger.warn('Failed to send Discord message', { id, error: err.message });
}
@@ -260,7 +261,13 @@ async function announce({ channelId, content, pingRoleId, color, title, descript
const prefix = pingRoleId ? `<@&${pingRoleId}> ` : '';
const embed = buildEmbed({ title, description, color });
const allowedMentions = pingRoleId ? { roles: [pingRoleId], parse: [] } : { parse: [] };
await sendToChannel(channelId, `${prefix}${content || ''}`.trim(), { embeds: [embed] }, allowedMentions);
await sendToChannel(
channelId,
`${prefix}${content || ''}`.trim(),
{ embeds: [embed] },
allowedMentions,
!pingRoleId, // keep role mention intact when pinging
);
}
function handleBusEvent(event) {
+30 -1
View File
@@ -14,6 +14,10 @@ const { loadConfig } = require('../helpers/configLoader');
const discordInvite = loadConfig().discord?.invite || null;
logger.info('Discord invite loaded:', discordInvite ? 'present' : 'not configured');
const ACTIVITY_SYNC_COOLDOWN_MS = 3000;
let lastActivitySync = 0;
let pendingActivitySync = null;
function buildUserEntry(socket) {
if (!socket) return null;
const role = getRole(socket);
@@ -107,7 +111,32 @@ turnEvents.on('activeDriver', () => {
logger.info('Active driver change; syncing all clients');
syncAll();
});
turnEvents.on('queue', () => {
turnEvents.on('queue', (event = {}) => {
const { reason } = event;
if (reason === 'activity') {
const now = Date.now();
const elapsed = now - lastActivitySync;
if (elapsed >= ACTIVITY_SYNC_COOLDOWN_MS) {
lastActivitySync = now;
logger.info('Turn activity; syncing all clients (immediate)');
syncAll();
return;
}
if (!pendingActivitySync) {
const delay = ACTIVITY_SYNC_COOLDOWN_MS - elapsed;
pendingActivitySync = setTimeout(() => {
lastActivitySync = Date.now();
pendingActivitySync = null;
logger.info('Turn activity; syncing all clients (delayed)');
syncAll();
}, delay);
}
return;
}
if (pendingActivitySync) {
clearTimeout(pendingActivitySync);
pendingActivitySync = null;
}
logger.info('Turn queue change; syncing all clients');
syncAll();
});
+1 -1
View File
@@ -268,7 +268,7 @@ function recordActivity(roverId, socketId) {
idleDisarmed.set(roverId, true);
clearTimeout(idleTimers.get(roverId));
idleDeadlines.delete(roverId);
turnEvents.emit('queue', { roverId });
turnEvents.emit('queue', { roverId, reason: 'activity' });
}
modeEvents.on('change', (mode) => {