我开始写一个Discord机器人,但我已经设法遇到了问题。我几乎只是编写了he所写的内容,并进行了一些不会对程序造成太大影响的微小更改。我有2个类,Main类只获取机器人的令牌,然后使用
创建机器人int
这是MyBot.cs:
MyBot bot = MyBot(token)
它确实连接,Bot确实上线了。这是我的控制台中的输出:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Discord;
using Discord.Commands;
namespace Coding_Bot
{
class MyBot
{
DiscordClient discord;
String botToken;
public MyBot(String tempToken)
{
botToken = tempToken;
discord = new DiscordClient(x =>
{
x.LogLevel = LogSeverity.Info;
x.LogHandler = Log;
});
Console.WriteLine("[BOT] Connecting...");
discord.ExecuteAndWait(async () =>
{
await discord.Connect(botToken, TokenType.Bot);
});
discord.UsingCommands(x =>
{
x.PrefixChar = '.';
x.AllowMentionPrefix = true;
});
var commands = discord.GetService<CommandService>();
commands.CreateCommand("info").Do(async (e) =>
{
Console.WriteLine("!info executed");
await e.Channel.SendMessage("Coding Bot");
});
}
private void Log(object sender, LogMessageEventArgs e)
{
Console.WriteLine("[BOT] " + e.Message);
}
}
}
当我现在在#general中键入.info时,没有任何反应。控制台中没有任何内容,#general中没有任何内容。 我已经查看了this,但它没有解决我的问题
编辑:我知道我应该使用CommandHandler类而不只是将所有命令放在那里。我不会在将来这样做,但这只是为了测试。答案 0 :(得分:2)
我知道这是愚蠢的,但你有机会发布机器人的权限吗? (这发生在我身上。)
答案 1 :(得分:2)
我将你的代码复制到我的一个测试机器人并稍微更改了一下,我的机器人能够连接,只是它没有响应命令。
这些是我改变的:
第一次更改
MyBot bot = new MyBot(token); //instead of MyBot bot = MyBot(token);
第二次更改:机器人没有响应命令
Console.WriteLine("[BOT] Connecting...");
discord.ExecuteAndWait(async () =>
{
await discord.Connect(botToken, TokenType.Bot);
});
以上内容放在代码的错误位置,所以我把它移到
下面commands.CreateCommand("info").Do(async (e) =>
{
Console.WriteLine("!info executed");
await e.Channel.SendMessage("Coding Bot");
});
其他详细信息:检查.NET框架版本,测试此代码时使用4.6.2,API Discord.NET版本为0.9.6
如果问题仍然存在,您可以在此处寻求帮助:https://discord.gg/JBp6gSN
轻微注意
最近,最新版本的Discord.NET出版了,v1.0.0。它涉及从v1到v0.9.6的重大更改,使所有内容都基于异步运行。如果这个问题给你带来很多麻烦,你可以通过使用Discord.NET v1轻松逃避这种情况。