Skip to content

Commit 9626c4d

Browse files
committed
chore(bots/discord): revert c68cfd1
Revert "feat(bots/discord): support training without label"
1 parent 5f74f2d commit 9626c4d

File tree

8 files changed

+29
-40
lines changed

8 files changed

+29
-40
lines changed

bots/discord/config.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@ export default {
6666
},
6767
},
6868
humanCorrections: {
69+
falsePositiveLabel: 'false_positive',
6970
allow: {
7071
members: {
7172
permissions: 8n,

bots/discord/config.schema.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ export type Config = {
3636
blacklist?: Filter
3737
}
3838
humanCorrections: {
39+
falsePositiveLabel: string
3940
allow?: {
4041
users?: string[]
4142
members?: {
@@ -71,7 +72,7 @@ export type ConfigMessageScanResponse = {
7172
image?: Array<RegExp>
7273
}
7374
filterOverride?: NonNullable<Config['messageScan']>['filter']
74-
response: ConfigMessageScanResponseMessage
75+
response: ConfigMessageScanResponseMessage | null
7576
respondToReply?: boolean | 'only_regex' | 'only_labeled'
7677
}
7778

bots/discord/src/commands/support/train/chat.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ const msRcConfig = config.messageScan?.humanCorrections?.allow
99

1010
export default new Command({
1111
name: 'train',
12-
description: 'Train a specific message to a specific label',
12+
description: 'Train a specific message or text to a specific label',
1313
type: Command.Type.ChatGuild,
1414
requirements: {
1515
users: msRcConfig?.users,
@@ -26,9 +26,9 @@ export default new Command({
2626
required: true,
2727
},
2828
label: {
29-
description: 'The label to train the message as (leave empty for out of scope)',
29+
description: 'The label to train the message as',
3030
type: Command.OptionType.String,
31-
required: false,
31+
required: true,
3232
},
3333
},
3434
allowMessageCommand: true,
@@ -49,7 +49,7 @@ export default new Command({
4949
'This command can only be used in or on text channels',
5050
)
5151

52-
if (label && !labels.includes(label))
52+
if (!labels.includes(label))
5353
throw new CommandError(
5454
CommandErrorType.InvalidArgument,
5555
`The provided label is invalid.\nValid labels are:${labels.map(l => `\n- \`${l}\``).join('')}`,
@@ -60,14 +60,14 @@ export default new Command({
6060
)
6161
if (!refMsg) throw new CommandError(CommandErrorType.InvalidArgument, 'The provided message does not exist.')
6262

63-
logger.debug(`User ${context.executor.id} is training message ${refMsg?.id} as ${label ?? 'out of scope'}`)
63+
logger.debug(`User ${context.executor.id} is training message ${refMsg?.id} as ${label}`)
6464

6565
await context.api.client.trainMessage(refMsg.content, label)
6666
await trigger.reply({
6767
embeds: [
6868
createSuccessEmbed(
6969
'Message trained',
70-
`The provided message has been trained as ${label ? `\`${label}\`` : 'out of scope'}. Thank you for your contribution!`,
70+
`The provided message has been trained as \`${label}\`. Thank you for your contribution!`,
7171
),
7272
],
7373
flags: MessageFlags.Ephemeral,

bots/discord/src/commands/support/train/context-menu.ts

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -37,10 +37,7 @@ export default new Command({
3737
components: [
3838
{
3939
custom_id: `tr_${trigger.targetMessage.channelId}_${trigger.targetId}`,
40-
options: [
41-
...labels.map(label => ({ label, value: label })),
42-
{ label: 'Out of scope', value: OutOfScopeLabel, emoji: { name: '❌' } },
43-
],
40+
options: labels.map(label => ({ label, value: label })),
4441
type: ComponentType.StringSelect,
4542
} satisfies APIStringSelectComponent,
4643
],

bots/discord/src/events/discord/interactionCreate/correctResponse.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -58,8 +58,8 @@ withContext(on, 'interactionCreate', async (context, interaction) => {
5858

5959
const editMessage = (content: string, description?: string) =>
6060
editInteractionMessage(interaction, msg.url, content, description)
61-
const handleCorrection = (label?: string) =>
62-
handleUserResponseCorrection(context, response, msg, interaction.user, label)
61+
const handleCorrection = (label: string) =>
62+
handleUserResponseCorrection(context, response, msg, label, interaction.user)
6363

6464
if (response.correctedById)
6565
return await editMessage(
@@ -82,7 +82,7 @@ withContext(on, 'interactionCreate', async (context, interaction) => {
8282
await editMessage('Canceled', 'You canceled this interaction. 😞')
8383
break
8484
case 'delete':
85-
await handleCorrection()
85+
await handleCorrection(msConfig.humanCorrections.falsePositiveLabel)
8686
await editMessage(
8787
'Marked as false positive',
8888
'The response has been deleted and marked as a false positive. Thank you for your feedback. 🎉',

bots/discord/src/events/discord/interactionCreate/trainMessage.ts

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -30,11 +30,8 @@ withContext(on, 'interactionCreate', async (context, interaction) => {
3030
flags: MessageFlags.Ephemeral,
3131
}))
3232

33-
const selectedLabel = interaction.values[0]
34-
await context.api.client.trainMessage(
35-
msg.content,
36-
selectedLabel === OutOfScopeLabel ? undefined : selectedLabel,
37-
)
33+
const selectedLabel = interaction.values[0]!
34+
await context.api.client.trainMessage(msg.content, selectedLabel)
3835
await interaction.reply({
3936
embeds: [
4037
createSuccessEmbed(

bots/discord/src/events/discord/messageReactionAdd/correctResponse.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -63,8 +63,8 @@ withContext(on, 'messageReactionAdd', async (context, rct, user) => {
6363

6464
logger.debug(`User ${user.id} is trying to correct the response ${rct.message.id}`)
6565

66-
const handleCorrection = (label?: string) =>
67-
handleUserResponseCorrection(context, response, reactionMessage, user, label)
66+
const handleCorrection = (label: string) =>
67+
handleUserResponseCorrection(context, response, reactionMessage, label, user)
6868

6969
try {
7070
if (reaction.emoji.name === Reactions.train) {
@@ -106,7 +106,7 @@ withContext(on, 'messageReactionAdd', async (context, rct, user) => {
106106
.setCustomId(`${componentPrefix}_cancel`),
107107
new ButtonBuilder()
108108
.setEmoji(Reactions.delete)
109-
.setLabel('Delete (mark as out of scope)')
109+
.setLabel('Delete (mark as false positive)')
110110
.setStyle(ButtonStyle.Danger)
111111
.setCustomId(`${componentPrefix}_delete`),
112112
),
@@ -117,8 +117,8 @@ withContext(on, 'messageReactionAdd', async (context, rct, user) => {
117117
components: rows,
118118
})
119119
} else if (reaction.emoji.name === Reactions.delete) {
120-
await handleCorrection()
121-
await user.send({ content: 'The response has been deleted and marked as out of scope.' })
120+
await handleCorrection(msConfig.humanCorrections.falsePositiveLabel)
121+
await user.send({ content: 'The response has been deleted and marked as a false positive.' })
122122
}
123123
} catch (e) {
124124
logger.error('Failed to correct response:', e)

bots/discord/src/utils/discord/messageScan.ts

Lines changed: 9 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ export const getResponseFromText = async (
1717
type ResponseConfig = Awaited<ReturnType<typeof getResponseFromText>>
1818
let responseConfig: Omit<ResponseConfig, 'triggers'> & { triggers?: ResponseConfig['triggers'] } = {
1919
triggers: undefined,
20-
response: null!,
20+
response: null,
2121
}
2222

2323
const firstLabelIndexes: number[] = []
@@ -143,22 +143,15 @@ export const handleUserResponseCorrection = async (
143143
{ api, database: db, config: { messageScan: msConfig }, logger }: typeof import('$/context'),
144144
response: Response,
145145
reply: Message,
146+
label: string,
146147
user: User | PartialUser,
147-
label?: string,
148148
) => {
149-
if (!label) {
150-
await Promise.all([reply.delete(), api.client.trainMessage(response.content, label)]).finally(() =>
151-
logger.debug(`User ${user.id} trained message ${response.replyId} as out of scope`),
152-
)
153-
154-
return
155-
}
156-
157149
const correctLabelResponse = msConfig!.responses!.find(r =>
158150
r.triggers.text!.some(t => 'label' in t && t.label === label),
159151
)
160152

161153
if (!correctLabelResponse) throw new Error('Cannot find label config for the selected label')
154+
if (!correctLabelResponse.response) return void (await reply.delete())
162155

163156
if (response.label !== label) {
164157
db.update(responses)
@@ -175,12 +168,12 @@ export const handleUserResponseCorrection = async (
175168
}))
176169
}
177170

178-
await Promise.all([
179-
api.client.trainMessage(response.content, label),
180-
reply.edit({
181-
components: [],
182-
}),
183-
]).finally(() => logger.debug(`User ${user.id} trained message ${response.replyId} as ${label}`))
171+
await api.client.trainMessage(response.content, label)
172+
logger.debug(`User ${user.id} trained message ${response.replyId} as ${label} (positive)`)
173+
174+
await reply.edit({
175+
components: [],
176+
})
184177
}
185178

186179
export const createMessageScanResponseComponents = (reply: Message<true>) => [

0 commit comments

Comments
 (0)