From 24bb9ddb4204f66acbfa459e39fcebec96d3e7ca Mon Sep 17 00:00:00 2001 From: Ali Hammoud Date: Thu, 2 Jul 2026 07:39:19 +0300 Subject: [PATCH] feat: remove just-ask auto-responder --- src/common/events/index.ts | 2 - src/features/just-ask/index.test.ts | 22 -------- src/features/just-ask/just-ask.ts | 79 ----------------------------- 3 files changed, 103 deletions(-) delete mode 100644 src/features/just-ask/index.test.ts delete mode 100644 src/features/just-ask/just-ask.ts diff --git a/src/common/events/index.ts b/src/common/events/index.ts index aef4ae6..05330c9 100644 --- a/src/common/events/index.ts +++ b/src/common/events/index.ts @@ -1,14 +1,12 @@ import { guildCreateEvent } from '@/features/guild-create/index.js'; import { hasVarEvent } from '@/features/has-var/index.js'; import { interactionCreateEvent } from '@/features/interaction-create/index.js'; -import { justAskEvent } from '@/features/just-ask/just-ask.js'; import { readyEvent } from '@/features/ready/index.js'; import type { DiscordEvent } from './types.js'; export const events: DiscordEvent[] = [ readyEvent, guildCreateEvent, - justAskEvent, hasVarEvent, interactionCreateEvent, ].flat(); diff --git a/src/features/just-ask/index.test.ts b/src/features/just-ask/index.test.ts deleted file mode 100644 index 57a09aa..0000000 --- a/src/features/just-ask/index.test.ts +++ /dev/null @@ -1,22 +0,0 @@ -import assert from 'node:assert'; -import { describe, it } from 'node:test'; -import { isAskingToAsk } from './just-ask.js'; - -void describe('justAsk Regex', () => { - const testCases = [ - { input: 'Anyone knows js?', expected: true }, - { input: 'Somebody can help with Python?', expected: true }, - { input: 'No one has experience with js?', expected: true }, - { input: 'Everybody tried React?', expected: true }, - { input: 'People familiar with Kubernetes?', expected: true }, - - { input: 'I know js well.', expected: false }, - { input: 'This is a question without the pattern.', expected: false }, - ]; - testCases.forEach(({ input, expected }) => { - void it(`should return ${expected} for input: "${input}"`, () => { - const result = isAskingToAsk(input); - assert.strictEqual(result, expected); - }); - }); -}); diff --git a/src/features/just-ask/just-ask.ts b/src/features/just-ask/just-ask.ts deleted file mode 100644 index e0deeae..0000000 --- a/src/features/just-ask/just-ask.ts +++ /dev/null @@ -1,79 +0,0 @@ -import path from 'node:path'; -import { Events, type Message, PermissionFlagsBits } from 'discord.js'; -import { createEvent } from '@/common/events/create-event.js'; -import { MINUTE } from '../../constants/time.js'; -import { config } from '../../env.js'; -import { loadMarkdownOptions } from '../../util/markdown.js'; -import { rateLimit } from '../../util/rate-limit.js'; - -// Subject patterns (who) -const reSubject = `(?:(?:any|some|no|every)(?: ?(?:one|body))|people|folks|peeps|who)`; - -// Verb patterns (has/knows/can help/etc) -const reVerb = `(?:ha[sv]e?|got|knows?|can(?: help)?|tried|used|worked(?: with)?|familiar(?: with)?|experience[ds]?(?: with)?|heard(?: of)?|seen)`; - -// Quantifiers (optional intensity) -const reQuantifier = `(?:any|some|much|good|prior|past|previous)`; - -// Question patterns -const reQuestion = `(?:experience|knowledge|info(?:rmation)?|ideas?|clues?|tips?|advice|help|thoughts?|insights?|suggestions?)`; - -// Common connectors -const reConnector = `(?:with|about|on|regarding|for|of)`; - -const askToAskPattern = new RegExp( - String.raw`\b${reSubject}\s+${reVerb}\s+(?:${reQuantifier}\s+)?(?:${reQuestion}\s+)?(?:${reConnector}\s+)?.+\?`, - 'i' -); - -export const isAskingToAsk = (text: string) => askToAskPattern.test(text); - -const [response] = await loadMarkdownOptions<{ name: string }>( - path.join(process.cwd(), 'assets/tips/'), - 'justask.md' -); - -const { canRun, reset } = rateLimit(10 * MINUTE); - -const shouldCheck = (message: Message) => { - // check rate limit - if (!canRun()) { - return false; - } - // check author - if (message.author.bot || message.author.system) { - return false; - } - // check roles/permissions - if ( - message.member !== null && - (message.member.roles.highest.comparePositionTo(config.roleIds.repel) >= - 0 || - message.member.permissions.has(PermissionFlagsBits.ModerateMembers)) - ) { - return false; - } - return true; -}; - -export const justAskEvent = createEvent( - { - name: Events.MessageCreate, - }, - async (message) => { - if (!shouldCheck(message)) { - return; - } - // Ignore long messages, likely user provided more context - if (message.content.split(' ').length > 10) { - return; - } - - if (isAskingToAsk(message.content)) { - await message.reply({ - content: response.content, - }); - reset(); - } - } -);