-
Notifications
You must be signed in to change notification settings - Fork 2
/
resolve.ts
55 lines (46 loc) · 1.67 KB
/
resolve.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
import * as app from "#app"
export default new app.SlashCommand({
name: "resolve",
description: "Mark as resolved a topic",
channelType: "thread",
async run(interaction) {
const topic = interaction.channel
const forum = topic.parent
if (!interaction.guild)
return interaction.base.reply({
content: `${app.emote(topic, "Cross")} Only usable in a guild.`,
ephemeral: true,
})
if (!forum || !forum.isThreadOnly())
return interaction.base.reply({
content: `${app.emote(topic, "Cross")} Only usable in a forum topic.`,
ephemeral: true,
})
if (
!interaction.base.member ||
(interaction.base.member.user.id !== topic.ownerId &&
!interaction.base.memberPermissions?.has("ManageThreads"))
)
return interaction.base.reply({
content: `${app.emote(topic, "Cross")} You must be the owner of the topic or have the \`ManageThreads\` permission to resolve it.`,
ephemeral: true,
})
const { resolved_channel_indicator, resolved_channel_tag } =
await app.getGuild(interaction.guild, { forceExists: true })
if (topic.name.startsWith(resolved_channel_indicator))
return interaction.base.reply({
content: `${app.emote(topic, "Cross")} Topic is already resolved.`,
ephemeral: true,
})
await topic.setName(`${resolved_channel_indicator} ${topic.name}`)
if (resolved_channel_tag) {
try {
await topic.setAppliedTags([resolved_channel_tag])
} catch (err) {}
}
return interaction.base.reply({
content: `${app.emote(topic, "CheckMark")} Thread marked as resolved.`,
ephemeral: true,
})
},
})