为不同公会的同一用户保存不同的数据
Save different data for same user on different Guilds
我设置了一个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.");
}
然后classUserAccounts
搜索我们的数据库中是否存在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
也独立于公会。所以我无法为来自不同行会的同一用户存储不同的数据。使用可用的最新测试版。
我怎样才能做到这一点。
您可以使用为每个用户实施的 Dictionary。每个用户都有自己的 Dictionary<GuildID, Data>
.
并且在 SQL 端(如果您使用的是 SQL),您可以有一个新的 table,它在用户 ID 上有一个外键约束,并且也有公会ID。
(如果用户统计数据的 none 在所有公会之间共享,则可能不需要对 userID 的外键约束;也就是说,您只有一个 SQL-table,您可以执行 SELECT stuff FROM tableName WHERE userID = ? AND guildID = ?
)
我设置了一个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.");
}
然后classUserAccounts
搜索我们的数据库中是否存在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
也独立于公会。所以我无法为来自不同行会的同一用户存储不同的数据。使用可用的最新测试版。
我怎样才能做到这一点。
您可以使用为每个用户实施的 Dictionary。每个用户都有自己的 Dictionary<GuildID, Data>
.
并且在 SQL 端(如果您使用的是 SQL),您可以有一个新的 table,它在用户 ID 上有一个外键约束,并且也有公会ID。
(如果用户统计数据的 none 在所有公会之间共享,则可能不需要对 userID 的外键约束;也就是说,您只有一个 SQL-table,您可以执行 SELECT stuff FROM tableName WHERE userID = ? AND guildID = ?
)