Сохраняйте разные данные для одного и того же пользователя в разных гильдиях

Я настроил команду 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 проверяет идентификаторы, и они одинаковы для пользователя независимо от гильдии.

Я пытался использовать SocketGuildUser, но, к сожалению, socketGuildUser.ID также не зависит от гильдии. Поэтому я не могу хранить разные данные для одного и того же пользователя из разных гильдий. Использование последней доступной бета-версии.

Как я могу этого добиться.


person Rishav    schedule 14.06.2018    source источник


Ответы (1)


Вы можете использовать Словарь реализовано для каждого пользователя. Где у каждого пользователя есть свой Dictionary<GuildID, Data>.

А на стороне SQL (если вы используете SQL) у вас может быть новая таблица, в которой есть ограничение внешнего ключа для идентификатора пользователя, а также идентификатор гильдии.
(ограничение внешнего ключа для идентификатора пользователя может не нужно, если никакая статистика пользователя не используется всеми гильдиями; Ака, у вас просто есть SQL-таблица, которую вы можете сделать SELECT stuff FROM tableName WHERE userID = ? AND guildID = ?)

person Kaynn    schedule 14.06.2018
comment
После долгих усилий, когда я использую json, это наконец сработало. Спасибо. - person Rishav; 17.06.2018