在不同的公会

时间:2018-06-14 11:16:43

标签: discord discord.net

我按如下方式设置stats命令

[Command("Stats")]
        public async Task StatsOther(SocketUser socketUser = null)
        {
            if (socketUser == null)
            {
                socketUser = Context.User;
            }
            var account = UserAccounts.GetAccount(socketUser);
            await Context.Channel.SendMessageAsync($"Hey {socketUser.Mention}, You have {account.Size} long sandwhiches and {account.XP} XP.");
        }

UserAccounts搜索我们的数据库中是否存在socketUser ID属性。现在说同一个用户在不同的公会我需要为他存储不同的数据但socketUser.ID无论公会都是一样的。因此,当用户尝试使用stats命令时,无论他现在在哪个公会,他都会看到相同的数据。

这里是UserAccounts.GetAccount领导和做事的地方,

public static UserAccount GetAccountFromID(ulong ID)
        {
            var result = from a in accounts
                         where a.ID == ID
                         select a;

            var FoundAccount = result.FirstOrDefault();
            if (FoundAccount == null)
            {
                FoundAccount = CreateUserAccount(ID);
            }
            return FoundAccount;
        }

显然,linq查询正在检查ID,无论公会如何,它们对于用户来说都是相同的。

我尝试使用SocketGuildUser但遗憾的是socketGuildUser.ID也独立于公会。所以我无法为来自不同公会的同一用户存储不同的数据。使用最新的测试版。

我怎样才能做到这一点。

1 个答案:

答案 0 :(得分:1)

您可以使用为每个用户实施的Dictionary。每个用户都有自己的Dictionary<GuildID, Data>

在SQL端(如果您使用的是SQL),您可以拥有一个新表,其中有一个外键约束用户ID,并且也有一个Guild ID。
(如果没有用户的统计信息在所有公会之间共享,则可能不需要对userID的外键约束; Aka你只有一个SQL表,你可以做SELECT stuff FROM tableName WHERE userID = ? AND guildID = ?