티스토리 뷰
목차
1. 기본틀 설명
2. GetOriginalResponseAsync
3. Context
4. Embed Send
5. Menu Send
1. 기본틀 설명
기본 틀은 다음과 같습니다.
public class InteractionModule : InteractionModuleBase<SocketInteractionContext>
{
[SlashCommand("ping", "Hello World")]
public async Task HandlePingTest()
{
await RespondAsync("Bot is alive");
}
}
SlashCommand 리플렉션을 통해 키워드와 설명을 적어줄 수 있는데, 첫 번째가 키워드 네임, 두 번째가 설명입니다.
Discord.net에서 제공하는 리플렉션에 대한 종류는 엄청 많은데 궁금하신 분들은 공식 Document를 확인해보시면 될 것같습니다. 저는 SlashCommand만 사용했기때문에 ㅎㅎ;
2. GetOriginalResponseAsync
그리고 RespondAsync를 통해 생성된 메시지의 ID를 얻어오고 싶은 경우가 있을 수 있습니다. 이럴 경우, GetOriginalResponseAsync().Result 를 통해 생성된 message 정보를 얻어올 수 있습니다.
FollowAsync도 message정보를 리턴하는데 FollowAsync의 경우 RespondAsync나 DeferAsync를 호출한 이후에 호출할 수 있어서 RespondAsync로 생성된 메시지의 정보는 얻지 못하더라구요.
[SlashCommand("ping", "Hello World")]
public async Task HandlePingTest()
{
await RespondAsync("Bot is alive");
var message = GetOriginalResponseAsync().Result;
Console.WriteLine(message.Id);
}
3. Context
그리고 SocektInteractionContext로 받았기 때문에, 안에는 호출된 디스코드 서버의 Guild, Channel 정보를 다 얻어올 수 있습니다. 이를 통해서 특정 TextChannel을 삭제한다던지 할 수 있습니다. counts는 특정 메시지의 아이디를 들고 있는 리스트이며, 제가 위 코드를 통해 넣어둔 상태입니다.
4. Embed Send
그리고 Embed형태로도 보낼 수 있는데 여기서 Embed형태는 아래와 같은 형태를 말합니다.
사용하는 방법은 다음 코드와 같습니다. EmbedBuilder 를 통해 형태를 구성하고, build()를 통해 Embed를 생성합니다.
그리고 addField를 통해 추가할 수도 A, B 이런식으로 추가도 할 수 있습니다.
AddField는 (Title, Description)으로 넣으시면됩니다.
EmbedBuilder builder = new EmbedBuilder()
.WithTitle("Today 학식")
.WithDescription("학식입니다.")
.WithColor(Color.Green);
.AddField("A", "~~~~");
Embed myEmbed = builder.build();
await RespondAsync(embed: myEmbed);
5. Menu Send
Menu는 두 가지의 Builder가 필요합니다. 첫 번째는 SelectMenuBuilder와 ComponentBuilder 입니다.
SelectMenuBuilder를 통해 메뉴를 만들고, Component에 넣은 후 Respond하면 됩니다.
참고로 Button도 형식이 비슷합니다.
var menu = new SelectMenuBuilder()
{
CustomId = "menu",
Placeholder = "Select Days"
};
//(출력값, Key)
menu.AddOption("월", "Mon");
menu.AddOption("화", "Tue");
menu.AddOption("수", "Wed");
menu.AddOption("목", "Thu");
menu.AddOption("금", "Fri");
// Component에 추가
var component = new ComponentBuilder();
component.WithSelectMenu(menu);
await RespondAsync("Show Select Menu", components: component.Build());
단 Menu는 다음과 같은 코드가 필수적으로 필요한데, 메뉴 선택 시 발생한 Interation을 동작하는 코드입니다. 제 코드 같은 경우에는 sql 동작을 하는 코드로 만들어놨기 때문에, 동작하지는 않지만 여러분이 필요한 코드를 넣으시면 됩니다. 참고로 string[] inputs에는 위의 AddOption에서 설적한 Key값이 들어옵니다.
[ComponentInteraction("menu")]
public async Task HandleMenuSelection(string[] inputs)
{
if (inputs[0] == "Mon")
{
myembed = sql.ReadCafeterial("월요일 학식", DateUtils.Monday());
await RespondAsync(embed: myembed);
}
else if (inputs[0] == "Tue")
{
myembed = sql.ReadCafeterial("화요일 학식", DateUtils.Tusday());
await RespondAsync(embed: myembed);
}
else if (inputs[0] == "Wed")
{
myembed = sql.ReadCafeterial("수요일 학식", DateUtils.Wednesday());
await RespondAsync(embed: myembed);
}
else if (inputs[0] == "Thu")
{
myembed = sql.ReadCafeterial("목요일 학식", DateUtils.Thursday());
await RespondAsync(embed: myembed);
}
else if (inputs[0] == "Fri")
{
myembed = sql.ReadCafeterial("금요일 학식", DateUtils.Friday());
await RespondAsync(embed: myembed);
}
}
실행 동작
'개인 > 디스코드 봇 With C#' 카테고리의 다른 글
기본 틀 제작하기 #2 (0) | 2023.06.12 |
---|---|
서론 Discord.Net #1 (0) | 2023.06.11 |
- Total
- Today
- Yesterday
- 자료구조
- Select모델
- 알고리즘
- 백준
- 스레드풀
- 더블버퍼링
- 고양이
- 인제대학교
- STL
- 보안
- BFS
- 링크드 리스트
- 드림핵
- 정보보안
- c++
- 레지스터
- 시스템보안
- 학교
- 멀티쓰레드
- Dreamhack
- 지뢰찾기
- queue
- 워셜알고리즘
- 야경
- 개발
- 컨퍼런스
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |