-1
votes

Discord.net | Comment puis-je transformer l'identifiant de l'utilisateur qui appartient aux personnes de ma base de données aux noms d'utilisateur que je peux utiliser pour mon classement?

Je fais un classement pour le système de mise à niveau mon bot de discordance. La liste fera une liste des personnes avec la plupart des XP et les commandera de la plus haute à la quantité la plus faible. J'ai déjà atteint cet objectif, mais je ne peux que montrer à l'adresse d'utilisateur à côté de leur montant XP dans le classement. Comment puis-je éteindre cet identifiant d'utilisateur dans un nom d'utilisateur?

foreach (ulong n in DbContext.Experiences.OrderByDescending(x => 
x.XP).Select(x => x.ID))
{
    Context.Guild.GetUser(n).ToString()
}

var leaderboard = string.Concat(DbContext.Experiences.OrderByDescending(x => 
x.XP).Select(x => $"Level {x.LevelNumber} with {x.XP} xp 
    {//username must be here}\n"));

await ReplyAsync(leaderboard.ToString());


0 commentaires

3 Réponses :


0
votes

supposer que vous avez déjà l'ID utilisateur souhaité

contexte.Guild.Gettuser (the_user_id_here) .Aname
Cela renvoie le nom d'utilisateur de l'utilisateur s'il existe.

Si votre classement est global (où l'utilisateur peut ne pas être sur le serveur dans lequel la commande est exécutée)
Vous pouvez utiliser client.geturer (the_user_id_here) .Asername plutôt que < Code> Client est le client de socket actuel de votre BOT.

(ou vous accédez également à la propriété surnom si vous souhaitez afficher le nom de l'utilisateur attaché au serveur à la place)


2 commentaires

J'ai déjà essayé cela avant et ça marche pour un utilisateur. Mais je veux que cela reçoive le nom d'utilisateur de tout le monde, avec seulement avoir son identifiant comme référence.


@Vacefron boucle ensuite dans la liste de leurs identifiants, puis récupérez leurs noms d'utilisateur avec la méthode spécifiée (en passant dans une liste pour vous permettre de faire ce que vous voulez avec cela, ou de l'ajouter au StringBuilder si vous envisagez d'imprimer tous. le nom de l'utilisateur).



1
votes

Ce que je voudrais voir voir (jamais regardé la discorde si c'est là que la structure de la base de données vient de) serait une table pour:

  • Guilde li>
  • expériences li>
  • utilisateurs li> ul>

    Je m'attendrais à ce que dbcontext.utilisateur ait quelque chose comme: p> xxx pré>

    et ensuite une table de guildes pour avoir quelque chose comme: P>

    var leaders = from g in context.Guilds
    join u in context.Users on g.UserId = u.UserId
    join e in context.Experience on u.UserId  = e.UserId
    select new LeaderView
    {
        UserName = u.UserName,
        UserId = u.UserId,
        GuildId = g.UserId,
        Experience = e.Experience
    };  
    
    leaders = leaders.OrderByDescending(o => o.Experience);
    return leaders.ToList();
    


3 commentaires

Corrigez-moi si je me trompe, mais je pense que vous supposez que j'ai les noms d'utilisateur stockés dans la base de données, ce que je n'ai pas. Je sais déjà comment obtenir l'ID utilisateur de tout le monde, mais je cherche à transformer ces identifiants utilisateur dans les noms d'utilisateur. Je peux cependant sélectionner la première personne sur la liste et obtenir son nom d'utilisateur avec ceci: context.guild.getuser (insertion_id) Mais je cherche à le faire pour tout le monde sur la liste et utilisez le entraîner un message.


Je suis. Et est-ce que le contexte n'est pas un contexte de base de données? J'ai fait une tonne d'hypothèses ne connaissant pas la discorde


Ouais, dbcontext est un contexte de base de données. Cependant, je n'ai pas les noms d'utilisateur stockés dans la base de données (sinon ce serait très simple haha).



0
votes

Voir les commentaires dans le code: xxx

Votre code modifié doit ressembler à quelque chose comme: xxx

Remarque: j'ai remplacé string.concat avec string.join car il s'agit d'une méthode de construction de chaînes plus efficace.


0 commentaires