2017-04-08 10 views
0

안녕하세요 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)"하지만, 내가 어떻게 할거야?

답변

0

대답은

클래스 {이름} 전에 공공 추가 그래서

namespace MyBot.Modules.Public 
{ 
    **Public** class test : ModuleBase 
{ 
    [Command("say")] 
    [Alias("echo")] 
    [Summary("Echos the provided input")] 
    public async Task Say([Remainder] string input) 
    { 
     await ReplyAsync(input); 
    } 
} 

}

을 따르고