Skip to content

Commit 9c0eb21

Browse files
committed
✨ :: 단체 DM 보내기 기능 추가
1 parent adff0fe commit 9c0eb21

File tree

2 files changed

+69
-1
lines changed

2 files changed

+69
-1
lines changed

src/MSGSaltBot.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import { saltRepository } from "./repositories/SaltRepository";
66
import MySaltCommand from "./commands/MySaltCommand";
77
import SaltRankCommand from "./commands/SaltRankCommand";
88
import HelpCommand from "./commands/HelpCommand";
9+
import DMCommand from "./commands/DMCommand";
910

1011
export class MSGSaltBot {
1112
private slashCommandMap = new Map<string, Command>();
@@ -35,7 +36,8 @@ export class MSGSaltBot {
3536
PingCommand,
3637
HelpCommand,
3738
MySaltCommand,
38-
SaltRankCommand
39+
SaltRankCommand,
40+
DMCommand
3941
];
4042

4143
this.slashCommandMap = slashCommands.reduce((map, command) => {

src/commands/DMCommand.ts

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
import { ChatInputCommandInteraction, Collection, Message, SlashCommandBuilder } from "discord.js";
2+
import { client } from "../discordClient";
3+
import { Command } from "../interfaces/Command";
4+
5+
export default {
6+
data: new SlashCommandBuilder()
7+
.setName("dm")
8+
.setDescription("MSG 서버에 있는 멤버들에게 DM을 대신 보내줘요!"),
9+
async execute(interaction: ChatInputCommandInteraction) {
10+
await interaction.reply({
11+
content:
12+
"DM을 보낼 멤버들의 디스코드 ID들을 입력해주세요\n(e.g. 'baekteun,2ishwa,junseopark,seojumee')"
13+
});
14+
const memberIDsMessage = await interaction.channel?.awaitMessages({
15+
max: 1,
16+
time: 30_000,
17+
filter: (msg) => msg.author.id == interaction.user.id,
18+
errors: ["time"]
19+
});
20+
if (!memberIDsMessage) return;
21+
22+
const memberIDsFirstMessage = memberIDsMessage.first();
23+
if (!memberIDsFirstMessage) return;
24+
25+
const memberIds = await getMemberIDs(memberIDsFirstMessage);
26+
27+
await memberIDsFirstMessage.reply({
28+
content: "DM 내용을 입력해주세요!"
29+
});
30+
31+
const dmContentMessage = await interaction.channel?.awaitMessages({
32+
max: 1,
33+
time: 30_000,
34+
filter: (msg) => msg.author.id == interaction.user.id,
35+
errors: ["time"]
36+
});
37+
if (!dmContentMessage) return;
38+
39+
const dmContentFirstMessage = dmContentMessage.first();
40+
if (!dmContentFirstMessage) return;
41+
42+
const dmContent = dmContentFirstMessage.content;
43+
44+
memberIds.forEach(async (memberID) => {
45+
const user = await client.users.fetch(memberID);
46+
await user.send({
47+
content: dmContent
48+
});
49+
});
50+
51+
await interaction.channel?.send({
52+
content: "DM을 성공적으로 전송했어요!"
53+
});
54+
55+
async function getMemberIDs(memberIDsReply: Message<boolean>): Promise<string[]> {
56+
const members = await interaction.guild?.members.fetch();
57+
if (!members) return [];
58+
const memberIDs = memberIDsReply.content.split(",");
59+
console.log(members.map((m) => m.user.username));
60+
const memIDs = members
61+
.filter((member) => memberIDs.includes(member.user.username))
62+
.map((m) => m.user.id);
63+
return memIDs;
64+
}
65+
}
66+
} as Command;

0 commit comments

Comments
 (0)