我正在使用Discord.NET版本1.0.2清理问题
我的Discord Bot应用程序中有一个MessageReceived任务:
private async Task MessageReceived(SocketMessage message)
Run Code Online (Sandbox Code Playgroud)
可以推断,此任务每次在Discord中接收到此机器人的消息时运行。但是,我试图弄清楚如何对机器人已收到的消息进行响应。在此之下SocketMessage,没有任何方法可以对收到的消息添加反应。我在网上看了看,发现其中RestUserMessage包含该方法AddReactionAsync(IEmote, RequestOptions)。然后我铸造Socket Message的RestUserMessage作为如此
var rMessage = (RestUserMessage) await message.Channel.GetMessageAsync(message.Id);
Run Code Online (Sandbox Code Playgroud)
AddReactionAsync在我的变量下运行该方法rMessage可以RestUserMessage工作,但是从网上阅读和文档中可以看出,参数没有正确使用。
IEmote似乎是一个字符串,但是字符串不满足此参数,表示没有从String到的转换IEmote。我尝试将其强制转换String为,IEmote但这没有用。
该RequestOptions变量似乎完全满足参数要求new RequestOptions()。
我的完整代码是:
private async Task MessageReceived(SocketMessage message)
{
var rMessage = (RestUserMessage) await message.Channel.GetMessageAsync(message.Id);
rMessage.AddReactionAsync(???, new RequestOptions());
}
Run Code Online (Sandbox Code Playgroud)
如何IEmote正确实现此参数,或如何定义IEmote变量。同样,定义new RequestOptions()变量也是实现此参数的正确方法。这是否也是通过Discord.NET向消息添加响应的正确方法,如果不是,这是正确的方法吗?
我所做的研究:
https://github.com/RogueException/Discord.Net/issues/490
https://discord.foxbot.me/docs/api/Discord.Rest.RestUserMessage.html
https://discord.foxbot.me/docs/api/Discord.IEmote.html
https://discord.foxbot.me/docs/api/Discord.RequestOptions.html
Run Code Online (Sandbox Code Playgroud) 我正在使用Microsoft Visual Studio 2013
我目前有这个switch语句:
switch (option)
{
case 1:
getline(cin, newname);
cout << "What would you like your new username to be?\nName: ";
getline(cin, newname);
name = newname;
cout << "\nYour username is now '" << name << "' with your balance being $" << balance << "\n";
options();
break;
case 2:
cout << "\nOpenning cheat menu\n";
cheats();
break;
default:
cout << "\nExitting to main title...\n";
title();
break;
}
Run Code Online (Sandbox Code Playgroud)
你可以忽略案例2和默认情况,只是显示所以你知道这些案例是有效的.案例2和默认工作完全正常,但案例1表现得很奇怪.正如你在案例1中看到的,我有两个getline(cin,newname); 您可能认为我应该只有一个,但由于某种原因,我需要两个才能使此代码正常运行.
如果我只有其中一个代码跳过用户应该给出的输入.如果我有两个它正常工作.
我问过这个人他们也不明白,因此:为什么这样做.
我正在使用 Discord.NET 1.0.2,这个问题特定于 Discord.NET。
我正在使用我Discord.Commands如何工作我的命令,我将它们初始化为这样
var msg = message as SocketUserMessage;
var context = new SocketCommandContext(_client, msg);
int argPos = 0;
if(msg.HasCharPrefix('>', ref argPos))
{
var result = await _service.ExecuteAsync(context, argPos);
}
Run Code Online (Sandbox Code Playgroud)
然后在我单独的班级中,我有一个特定的命令
public class Command : ModuleBase<SocketCommandContext>
{
[Command("test")]
public async Task balanceCommmand(String[] stringArray)
{
// code
}
}
Run Code Online (Sandbox Code Playgroud)
但是,在运行程序时,我收到System.InvalidOperationException“附加信息:未找到类型 String[] 的类型读取器,必须指定一个”
我之前在异步任务下使用过参数,但它似乎不想将字符串数组作为参数。
我如何能够使用 Discord.Commands 1.0.2 版将字符串数组作为参数传递给命令。
如果没有办法做到这一点,有没有办法通过使用替代方法来模仿这一点?
我在谷歌上环顾四周,没有找到与我有类似问题甚至类似问题的人。