-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
4 changed files
with
143 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,38 @@ | ||
import { RegistrationStep } from "@prisma/client"; | ||
import config, { messages } from "../../config.js"; | ||
import { prisma } from "../../main.js"; | ||
import type { Subcommand } from "../types.js"; | ||
|
||
const executeRequestsAccept: Subcommand = async (interaction) => { | ||
if (!interaction.inGuild()) { | ||
await interaction.reply("請在伺服器內使用此指令"); | ||
return; | ||
} | ||
|
||
// requestUser is a User, but we need a GuildMember to add the role. | ||
// Find the GuildMember by the User's ID. | ||
const requestUser = interaction.options.getUser("使用者", true); | ||
const requester = interaction.guild!.members.cache.get(requestUser.id)!; | ||
const discordId = BigInt(requester.id); | ||
|
||
const member = await prisma.member.findUnique({ where: { discordId } }); | ||
if (!member) { | ||
await interaction.reply(messages.error.generic); | ||
return; | ||
} | ||
if (member.registrationStep !== RegistrationStep.COMMITTEE_CONFIRMATION) { | ||
await interaction.reply("這個使用者並沒有等待幹部確認的加入請求"); | ||
return; | ||
} | ||
|
||
await prisma.member.update({ | ||
data: { registrationStep: RegistrationStep.COMPLETE }, | ||
where: { discordId }, | ||
}); | ||
const membershipRole = interaction.guild!.roles.cache.get(config.membershipRoleId)!; | ||
await requester.roles.add(membershipRole); | ||
await requester.send(messages.join.accept); | ||
await interaction.reply(`已接受 <@${requester.id}> 的加入請求。`); | ||
}; | ||
|
||
export default executeRequestsAccept; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,28 @@ | ||
import { RegistrationStep } from "@prisma/client"; | ||
import { prisma } from "../../main.js"; | ||
import type { Subcommand } from "../types.js"; | ||
|
||
const executeRequestsList: Subcommand = async (interaction) => { | ||
if (!interaction.inGuild()) { | ||
await interaction.reply("請在伺服器內使用此指令"); | ||
return; | ||
} | ||
|
||
const requests = await prisma.member.findMany({ | ||
where: { registrationStep: RegistrationStep.COMMITTEE_CONFIRMATION }, | ||
}); | ||
|
||
const requestList = requests.map((request) => { | ||
const relativeNotificationDate = `<t:${Math.floor(+(request.notificationSentAt ?? Date.now()) / 1000)}:R>`; | ||
const { discordId, email, name, studentId } = request; | ||
return `<@${discordId}> ${relativeNotificationDate}: \`${email}\`, \`${name}\`, \`${studentId}\``; | ||
}); | ||
|
||
await interaction.reply( | ||
`目前有 ${requests.length} 位使用者正在等待幹部確認${requests.length ? ":" : "。"} | ||
${requests.length ? "(`電子郵件`, `姓名`, `學號`)" : ""} | ||
${requestList.join("\n")}`, | ||
); | ||
}; | ||
|
||
export default executeRequestsList; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,34 @@ | ||
import { RegistrationStep } from "@prisma/client"; | ||
import { prisma } from "../../main.js"; | ||
import type { Subcommand } from "../types.js"; | ||
import { messages } from "../../config.js"; | ||
|
||
const executeRequestsReject: Subcommand = async (interaction) => { | ||
if (!interaction.inGuild()) { | ||
await interaction.reply("請在伺服器內使用此指令"); | ||
return; | ||
} | ||
|
||
const requester = interaction.options.getUser("使用者", true); | ||
const reason = interaction.options.getString("原因", true); | ||
const discordId = BigInt(requester.id); | ||
|
||
const member = await prisma.member.findUnique({ where: { discordId } }); | ||
if (!member) { | ||
await interaction.reply({ content: messages.error.notInDatabase, ephemeral: true }); | ||
return; | ||
} | ||
if (member?.registrationStep !== RegistrationStep.COMMITTEE_CONFIRMATION) { | ||
await interaction.reply({ content: messages.error.notAwaitingConfirmation, ephemeral: true }); | ||
return; | ||
} | ||
|
||
await prisma.member.update({ | ||
data: { registrationStep: RegistrationStep.BASIC_INFORMATION }, | ||
where: { discordId }, | ||
}); | ||
await requester.send(messages.join.reject(reason)); | ||
await interaction.reply(`已拒絕 <@${requester.id}> 的加入請求,理由:${reason}。`); | ||
}; | ||
|
||
export default executeRequestsReject; |