我正在尝试为c#discord bot创建一个xp系统但是我的int不会在命令之外保存,例如检查余额或购买其他需要我检查整数值的项目。我是否需要将这些数据存储在sql数据库中,或者可以将它作为int放在visual studio中。感谢。
public class Buy : ModuleBase<SocketCommandContext>
{
int coins = 24;
int coins2buymeme = 23;
[Command("buyrole")]
public async Task Ishoping (IGuildUser user, IRole role)
{
string invite_code = "you have sucesfully purchased the " + role + " role for " + coins2buymeme + " coins !!!";
await Context.Channel.SendMessageAsync(invite_code);
await user.AddRoleAsync(role);
Console.WriteLine("User bought" + role + "for" + coins2buymeme + "if you are not happy with this decision please change there roles on server manually");
this.coins -= coins2buymeme;
Console.WriteLine("your new balance is " + this.coins + " if you are not happy with this decision please change there roles on server manually");
const int delay = 90000;
string bought = "your new balance is " + this.coins + " if you are not happy with this decision please change there roles on server manually";
await Context.Channel.SendMessageAsync(bought);
}
[Command("refund")]
public async Task Ishopidang(IGuildUser user, IRole roles)
{
string invite_code = "you have sucesfully refunded the " + roles + " role for " + coins2buymeme + " coins !!!";
await Context.Channel.SendMessageAsync(invite_code);
await user.RemoveRoleAsync(roles);
Console.WriteLine("User refunded" + roles + "for" + coins2buymeme + "if you are not happy with this decision please change there roles on server manually");
}
[Command("balance")]
public async Task Ishopiddang(IGuildUser user)
{
await Context.Channel.SendMessageAsync("you have " + this.coins + " to spend use !shop to find out more");
Console.WriteLine("User has " + this.coins + "if you are not happy with this decision please change there roles on server manually");
}
}
}
答案 0 :(得分:0)
你的coins2buymeme
没问题,你可以更好地保持静态和只读
(除非您希望程序在逻辑上将值改为中途)
现在,只要用户使用coins
命令,您的buyrole
就会更改,但在命令完成后,Buy
对象的当前实例将被“销毁”。登记/>
当你再次调用一个命令时,会创建一个新的实例。
这意味着只要调用一个命令,coins
的值总是从24开始。
您可以将其更改为全局静态变量,但这会导致所有用户拥有相同数量的硬币。
我建议将其存储为SQL数据库。只需确保根据ID
确定每个用户
SQL数据库的好处而不是将其存储为对象是在机器人关闭时,coins
的值保留给每个用户。
有一个关于如何在Visual Studio here上设置SQL数据库的YouTube视频教程。它还教授如何将.NET SQLClient
与C#一起使用。
(注意:我建议您了解有关对象和类属性的更多信息)
答案 1 :(得分:0)
鉴于问题的措辞,我认为您之前没有做太多编程。如果我认为有误,我深表歉意。
运行机器人时,您正在运行可执行文件。只要可执行文件运行,它就可以创建变量(如ints)并将数据存储在其中。这将在“内存中”完成,因为可执行文件会要求计算机提供一些所需的内存(RAM)。但是,一旦可执行文件关闭/退出,它将把它占用的内存提供给计算机,从而丢失所有数据。 如果您希望在僵尸程序关闭时保留数据,则需要通过将其保存到文件,数据库等中来将其保存到硬盘驱动器中。您可以选择适合自己的保存方式。大多数人会建议使用数据库,因为它可以保存您的数据并将其与其他数据相关联,从而可以轻松存储和读取复杂数据。
您没有想要的一般解决方案。如果要保存数据,则需要查看需要保存的内容,然后研究不同的方式并查看适合您的需求的内容。