(Discord bot 1.0 c#)如何创建一个新类并添加cmds?

时间:2017-04-08 17:02:23

标签: c# discord discord.net

你好Stackoverflow! (第一次在这里发帖,所以请你好看:P)

所以,我决定在c#中制作一个discord bot 1.0(我正在学习c#atm)并且我遇到了一个问题,我不知道如何解决它..

所以,描述一下我要做的是跟随。

我正在尝试这样做,所以我可以为x命令设置不同的类,例如.say等,而不是在下面的“命令”中使用em,所以它更容易使用。

我得到了这些工作三个脚本,但不能让第四个工作

//启动

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 System;
using System.Linq;
using System.Threading.Tasks;
using Discord;
using Discord.Commands;
using Discord.WebSocket;
using System.Runtime.InteropServices;
using System.Diagnostics;

namespace MyBot.Modules.Public
{
public class PublicModule : ModuleBase
{
    [Command("invite")]
    [Summary("Returns the OAuth2 Invite URL of the bot")]
    public async Task Invite()
    {
        var application = await Context.Client.GetApplicationInfoAsync();
        await ReplyAsync(
            $"A user with `MANAGE_SERVER` can invite me to your server here: <https://discordapp.com/oauth2/authorize?client_id={application.Id}&scope=bot>");
    }

    [Command("leave")]
    [Summary("Instructs the bot to leave this Guild.")]
    [RequireUserPermission(GuildPermission.ManageGuild)]
    public async Task Leave()
    {
        if (Context.Guild == null) { await ReplyAsync("This command can only be ran in a server."); return; }
        await ReplyAsync("Leaving~");
        await Context.Guild.LeaveAsync();
    }
}
}

//这是我想要工作的那个,但我只得到“未知命令”作为错误?

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,对不起,如果有这个问题的骗局,但我不知道该搜索什么来找到它

EDIT 我被告知要“在课堂上训练一下medshds(cmds)”但是我怎么会去做todo呢?

1 个答案:

答案 0 :(得分:1)

答案如下:

在课程{name}之前添加公共所以它将是

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);
    }
}

}