2017-10-01 1 views
0

Ich versuche, ein xp-System für AC# Diskord Bot zu machen, aber meine Int speichern nicht außerhalb des Befehls zum Beispiel um das Guthaben zu überprüfen oder andere Artikel zu kaufen, die ich den Wert von dort überprüfen müsste ganze Zahl. Müsste ich diese Daten in einer SQL-Datenbank speichern, oder wäre es möglich, sie im Visual Studio als Int zu belassen? Vielen Dank.Discord Bot C# XP System

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

Was 'int' Sie sich beziehen? –

+0

Die Münzen int, so dass, wenn ein Benutzer eine Mem-Rolle kauft, die Münzmenge sinkt und sie in der Lage sein werden, sie in ihrem Kontostand zu sehen. –

Antwort

0

Ihre coins2buymeme ist in Ordnung, besser, dass Sie es statisch und nur lesbar zu machen.
(Es sei denn, Sie das Programm logisch den Wert auf halber Strecke geändert werden soll)

jetzt Ihre coins, ändern, wenn der Benutzer einen buyrole Befehl verwendet, aber nachdem der Befehl abgeschlossen ist, wird die aktuelle Instanz des Buy Objekt ' zerstört'.
Und wenn Sie einen Befehl erneut aufrufen, würde eine neue neue Instanz erstellt werden.
Das bedeutet, dass der Wert coins immer bei 24 beginnt, wenn ein Befehl aufgerufen wird.

Sie könnten dies in eine globale, statische Variable ändern, aber das würde dazu führen, dass alle Benutzer die gleiche Menge an Münzen haben.

Ich empfehle, es als SQL-Datenbank zu speichern. Stellen Sie nur sicher, dass Sie jeden Benutzer anhand seiner ID identifizieren.
Der Vorteil einer SQL-Datenbank, anstatt sie als Objekt zu speichern, ist, wenn Ihr Bot heruntergefahren wird, der Wert coins für jeden Benutzer.

Es gibt ein Youtube-Video-Tutorial zum Einrichten einer SQL-Datenbank in Visual Studio here. Es lehrt auch, wie man das .NET SQLClient mit C# benutzt.

(Anmerkung: Ich empfehle Ihnen, erfahren Sie mehr über das Objekt und Klasseneigenschaften)