Discord๋ ๊ฒ์ด๋จธ๊ฐ ์ ์ฉํ๋ ์ค์๊ฐ ์ฑํ ์ปค๋ฎค๋ํฐ ์๋น์ค๋ก ์ด์ ๋ ๊ฒ์ด๋ฐ ๋ถํฐ ๊ต์ก๊ณผ ๋น์ฆ๋์ค ์์ญ์ผ๋ก ๊ทธ ์๋น์ค๋ฅผ ํ์ฅํ๊ณ ์์ต๋๋ค.
Discord ๋ด์ ๋ง๋๋ ๊ฒ์ Discord.NET์ ์ด์ฉํ๋ฉด ์ด๋ ต์ง ์์ต๋๋ค.
๋ด ์์ฑ
DEVELOPER PORTAL์์ ์๋ก์ด ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ง๋ญ๋๋ค.
๋ค์ Bot
์์ ๋ด์ ์ถ๊ฐํฉ๋๋ค.
์ด ๋ ์ฑ ์ด๋ฆ์ด ๋ง์ด ์ฌ์ฉ๋๋ ์ด๋ฆ์ผ ๊ฒฝ์ฐ ๋ด์ ์์ฑํ ์ ์์ผ๋ฏ๋ก ์ฑ ์ด๋ฆ์ ์ ์ ํ๊ฒ ๋ณ๊ฒฝํด์ผ ํฉ๋๋ค.
Reset Token
์ผ๋ก ๋ด API์์ ์ฌ์ฉํ ํ ํฐ์ ์์ฑํฉ๋๋ค.
์ ์ ํ ์ธํ ํธ๊ฐ ํ์ฑํ ๋์ง ์์ผ๋ฉด ๋ด ์์ ์ ์ ์ ๋์ํ์ง ์์ต๋๋ค.
๋ค์ ์๋ฒ์ ๋ด์ ์ถ๊ฐํ URL์ ์์ฑํฉ๋๋ค.
(BOT PERMISSIONS๋ ํธ์์ Administrator๋ฅผ ์ฒดํฌํ์์ต๋๋ค. ์ค์ ๋ก๋ ํ์์ ๋ถํฉํ๋ ์ต์ํ์ ํผ๋ฏธ์ ๋ง ์ ํํด์ผ ํฉ๋๋ค.)
Discord๊ฐ ๋ก๊ทธ์ธ ๋ ์ํ์์ ํด๋ฆฝ๋ณด๋ ๋ณต์ฌ๋ ์ฃผ์๋ฅผ ์คํํ๋ฉด ์์ ์ ์๋ฒ์ ๋ด์ ์ถ๊ฐํ ์ ์์ต๋๋ค.
Discord.NET์ ์ด์ฉํด์ ์ ์ฝ ๊ธฐ๋ฅ ๊ตฌํ
๋ด์ ์์์ ์์ฝ ํ ์คํธ๋ถํฐ ํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ์ฝ์ ํ๋ก์ ํธ๋ก ๋จผ์ Discord.NET ํจํค์ง๋ฅผ ํ๋ก์ ํธ์ ์ค์นํฉ๋๋ค.
๋ค์์ ๋์ค์ฝ๋ ๋ด์ ๊ธฐ๋ณธ ์์ฝ ์ฝ๋ ์ ๋๋ค.
using Discord;
using Discord.Commands;
using Discord.WebSocket;
using System.Reflection;
var client = new DiscordSocketClient(new()
{
LogLevel = LogSeverity.Verbose,
// ์ค์ ์ฌ์ฉํ ๋๋ ๊ผญ ํ์ํ intent๋ง ์ง์ ํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
GatewayIntents = GatewayIntents.All ^ (GatewayIntents.GuildPresences | GatewayIntents.GuildScheduledEvents | GatewayIntents.GuildInvites)
});
var commandService = new CommandService(new()
{
LogLevel = LogSeverity.Verbose,
});
client.Log += OnClientLogReceived;
commandService.Log += OnClientLogReceived;
await client.LoginAsync(TokenType.Bot, "๋ด ํ ํฐ");
await client.StartAsync();
await commandService.AddModulesAsync(assembly: Assembly.GetExecutingAssembly(), services: null);
client.MessageReceived += OnClientMessage;
client.Ready += OnReady;
Console.ReadLine();
async Task OnClientMessage(SocketMessage arg)
{
// ํด๋ผ์ด์ธํธ ๋ฉ์์ง ์ฒ๋ฆฌ
// ์ฌ์ฉ์ ๋ฉ์์ง๊ฐ ์๋๋ฉด
if (arg is not SocketUserMessage message)
return;
if (client is null || commandService is null)
return;
var pos = 0;
//if (message.HasCharPrefix('!', ref pos) is false || message.HasMentionPrefix(_client.CurrentUser, ref pos) is true || message.Author.IsBot is true)
if (message.HasCharPrefix('!', ref pos) is false || message.Author.IsBot is true)
return;
var context = new SocketCommandContext(client, message);
await commandService.ExecuteAsync(context, pos, null);
}
Task OnReady()
{
// ๋ด์ด ์์ ์ค๋น๋์์ ๋ ๊ด๋ จ ์ฒ๋ฆฌ
return Task.CompletedTask;
}
Task OnClientLogReceived(LogMessage arg)
{
// Discord ๋ก๊ทธ ๊ธฐ๋ก
Console.WriteLine(arg.ToString());
return Task.CompletedTask;
}
/// <summary>
/// ๋ช
๋ น์ด ๋ชจ๋. commandService.AddModulesAsync()์ ์ํด ์ถ๊ฐ๋จ
/// </summary>
public class RemoteModule : ModuleBase<SocketCommandContext>
{
[Command("echo")]
[Alias("!")]
public Task Echo(string message) => Send(message);
private Task Send(string message) => Context.Channel.SendMessageAsync(message);
}
์ฝ๋๋ฅผ ์คํํ๋ฉด OnClientLogReceived()
์ ์ํด ๋ค์์ฒ๋ผ ๋ก๊ทธ๋ฅผ ํ์ธํ ์ ์๊ณ
Discord ์ฑ๋์์ ๋ด์๊ฒ ๋ช ๋ น์ ์ค ์ ์๊ฒ ๋ฉ๋๋ค.
์ข ๋ ์์ธํ ์ฌ์ฉ ๋ฐฉ๋ฒ์ Discord.NET
์ ๊ณต ๋ฌธ์๋ฅผ ์ฐธ์กฐํ์ธ์!