我正在尝试为Discord Server创建Discord.Net机器人。我希望Bot在命令之间共享数据,但是目前由于异步任务的性质,随着在每个任务上创建新实例,类变量将重置为null。我想知道其他Discord Bot如何处理这个问题。
我知道我能够将值保存到文件/数据库中,但是我希望使用更简单的方法来允许多个并发命令。
using Discord.Commands;
using System.Threading.Tasks;
namespace UsefulDiscordBot.Modules
{
public class Foo : ModuleBase<SocketCommandContext>
{
string test;
[Command("initializeString")]
public async Task initializeString()
{
test = "Initialized";
}
[Command("addToString")]
public async Task addToString([Remainder]string s)
{
test += s;
}
[Command("printString")]
public async Task printString()
{
await ReplyAsync(test);
}
}
}
答案 0 :(得分:0)
Discord.Net中的命令模块是瞬态的(它们在需要时产生,一旦执行便丢弃)。就是说,您想要实现的一般最佳实践(当使用Discord.Net构建机器人时)是使用Service
-类来将数据存储在命令模块外部。
您可以通过Discord.Net documentation阅读有关如何执行此操作的信息。常见问题解答(链接)中有专门针对此的部分。希望对您有所帮助。
答案 1 :(得分:-3)
我不知道您想对机器人做什么,但是您可以查看静态类的静态属性。
示例:
public static class SystemData
{
public static int Attribute1;
public static string Attribute2;
public static DateTime Attribute3;
}
请记住,如果这些数据在用户之间共享,则不能使用静态属性,请考虑使用数据库。
如果您不知道静态属性的工作原理,请查看Static Attributes。