안녕하세요 Stackoverflow! (처음으로 여기에 올리면 plz가 좋을 겁니다 : P)(Discord bot 1.0 C#) 새 클래스를 만들고 cmds를 추가하는 방법은 무엇입니까?
그래서 저는 C# (나는 C# atm을 배웠습니다)에서 불화 봇 1.0을 만들기로 결정했습니다. 문제에 봉착했습니다. 그것을 고칠 방법을 모르겠다.
그래서, 내가 뭘 하려는지 설명하는 것은 다음과 같다.
나는 "명령"하나를 사용하는 대신에 .say 등과 같은 x 명령에 대해 다른 클래스를 가질 수 있도록 노력하고 있습니다.
나는이 작업을 세 개의 스크립트를 가지고 있지만 네 번째// 시작
을 작동시킬 수 어차피using System;
using System.Threading.Tasks;
using Discord;
using Discord.WebSocket;
using Discord.Commands;
namespace MyBot
{
public class Program
{
// Convert our sync main to an async main.
public static void Main(string[] args) =>
new Program().Start().GetAwaiter().GetResult();
private DiscordSocketClient client;
private CommandHandler handler;
public async Task Start()
{
// Define the DiscordSocketClient
client = new DiscordSocketClient();
var token = "Censored";
// Login and connect to Discord.
await client.LoginAsync(TokenType.Bot, token);
await client.StartAsync();
var map = new DependencyMap();
map.Add(client);
handler = new CommandHandler();
await handler.Install(map);
// Block this program until it is closed.
await Task.Delay(-1);
}
private Task Log(LogMessage msg)
{
Console.WriteLine(msg.ToString());
return Task.CompletedTask;
}
}
}
// 내 명령 핸들러
using System.Threading.Tasks;
using System.Reflection;
using Discord.Commands;
using Discord.WebSocket;
namespace MyBot
{
public class CommandHandler
{
private CommandService commands;
private DiscordSocketClient client;
private IDependencyMap map;
public async Task Install(IDependencyMap _map)
{
// Create Command Service, inject it into Dependency Map
client = _map.Get<DiscordSocketClient>();
commands = new CommandService();
_map.Add(commands);
map = _map;
await commands.AddModulesAsync(Assembly.GetEntryAssembly());
client.MessageReceived += HandleCommand;
}
public async Task HandleCommand(SocketMessage parameterMessage)
{
// Don't handle the command if it is a system message
var message = parameterMessage as SocketUserMessage;
if (message == null) return;
// Mark where the prefix ends and the command begins
int argPos = 0;
// Determine if the message has a valid prefix, adjust argPos
if (!(message.HasMentionPrefix(client.CurrentUser, ref argPos) || message.HasCharPrefix('!', ref argPos))) return;
// Create a Command Context
var context = new CommandContext(client, message);
// Execute the Command, store the result
var result = await commands.ExecuteAsync(context, argPos, map);
// If the command failed, notify the user
if (!result.IsSuccess)
await message.Channel.SendMessageAsync($"**Error:** {result.ErrorReason}");
}
}
}
// 명령
// 이것은 내가 원하는 작업이지만 "알 수없는 명령"만 오류로 표시됩니까?
using Discord.Commands;
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading.Tasks;
namespace MyBot.Modules.Public
{
class test : ModuleBase
{
[Command("say")]
[Alias("echo")]
[Summary("Echos the provided input")]
public async Task Say([Remainder] string input)
{
await ReplyAsync(input);
}
}
}
당신이 내가 잘못된 일을 알고 있다면 말해 또는 문제에 대한 몇 가지 정보에 저를 냉동하고 내가 그것을 해결 : 감사를 사전에 시도 할 수 있습니다하십시오! 이 질문에 속는 사람이있는 경우 PS는, 미안 메신저하지만 난 그것을
편집 내가 들었다 찾기위한 검색 해야할지 모르겠어에 "구덩이 metohds 클래스에서 (CMDS)"하지만, 내가 어떻게 할거야?