Discord Bot c#XP系统

时间:2017-10-01 10:22:24

标签: c# discord

我正在尝试为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");
    }



}

}

2 个答案:

答案 0 :(得分:0)

你的coins2buymeme没问题,你可以更好地保持静态和只读 (除非您希望程序在逻辑上将值改为中途)

现在,只要用户使用coins命令,您的buyrole就会更改,但在命令完成后,Buy对象的当前实例将被“销毁”。登记/> 当你再次调用一个命令时,会创建一个新的实例。
这意味着只要调用一个命令,coins的值总是从24开始。

您可以将其更改为全局静态变量,但这会导致所有用户拥有相同数量的硬币。

我建议将其存储为SQL数据库。只需确保根据ID确定每个用户 SQL数据库的好处而不是将其存储为对象是在机器人关闭时,coins的值保留给每个用户。

有一个关于如何在Visual Studio here上设置SQL数据库的YouTube视频教程。它还教授如何将.NET SQLClient与C#一起使用。

(注意:我建议您了解有关对象和类属性的更多信息)

答案 1 :(得分:0)

鉴于问题的措辞,我认为您之前没有做太多编程。如果我认为有误,我深表歉意。

运行机器人时,您正在运行可执行文件。只要可执行文件运行,它就可以创建变量(如ints)并将数据存储在其中。这将在“内存中”完成,因为可执行文件会要求计算机提供一些所需的内存(RAM)。但是,一旦可执行文件关闭/退出,它将把它占用的内存提供给计算机,从而丢失所有数据。 如果您希望在僵尸程序关闭时保留数据,则需要通过将其保存到文件,数据库等中来将其保存到硬盘驱动器中。您可以选择适合自己的保存方式。大多数人会建议使用数据库,因为它可以保存您的数据并将其与其他数据相关联,从而可以轻松存储和读取复杂数据。

您没有想要的一般解决方案。如果要保存数据,则需要查看需要保存的内容,然后研究不同的方式并查看适合您的需求的内容。