我按如下方式设置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
也独立于公会。所以我无法为来自不同公会的同一用户存储不同的数据。使用最新的测试版。
我怎样才能做到这一点。
答案 0 :(得分:1)
您可以使用为每个用户实施的Dictionary。每个用户都有自己的Dictionary<GuildID, Data>
。
在SQL端(如果您使用的是SQL),您可以拥有一个新表,其中有一个外键约束用户ID,并且也有一个Guild ID。
(如果没有用户的统计信息在所有公会之间共享,则可能不需要对userID的外键约束; Aka你只有一个SQL表,你可以做SELECT stuff FROM tableName WHERE userID = ? AND guildID = ?
)