Права пользователя в телеграм боте (C#)

379
07 июня 2021, 05:00

Делаю телеграм бота. Надо создать права для каждого пользователя, к примеру чтобы пользователь не мог перейти из главного меню в другое просто написав: "Другой меню". Попытался сделать так, но ничего не вышло, если у одного пользователя были права на другое меню, то у всех появлялись права на это: Класс пользователя:

class user
{
    public string userName;
    public List<bool> permissions;
    public long chatId;
    public bool logined = false;
    public user(string a, List<bool> b, long c, bool f)
    {
        userName = a;
        permissions = b;
        chatId = c;
        logined = f;
    }
}

Метод для нахождения пользователя:

public static user FindUser(string userName)
{
    foreach (user u in users)
    {
        if (u.userName == userName)
        {
            return u;
        }
    }
    return null;
}

Создание пользователя:


if (FindUser(e.Message.From.Username) == null)
{
    users.Add(new user(e.Message.From.Username, standart_Permissions, e.Message.Chat.Id, false));
}

Вот так я задаю право:

//GameBot Permissions
//0 - Вход
FindUser(e.Message.From.Username).permissions[0] = true;
Answer 1

Уточните как хранятся пользователи, если users - List или хранилище, которое кэширует пользователей в том же списке, то создание

users.Add(new user(... standart_Permissions ...);

А затем изменение через

FindUser(e.Message.From.Username).permissions[0] = true;

Вызовет изменение списка standart_Permissions и выдаст права для всех пользователей, так как List - ссылочный тип. (Принципы работы ссылочных типов можно почитать, например, тут - https://metanit.com/sharp/tutorial/2.16.php)

Для того чтобы этого избежать, нужно пересоздавать список прав, например, стандартным методом .ToList() -

users.Add(new user(... standart_Permissions.ToList() ...);
READ ALSO
UWP подключение к SQL

UWP подключение к SQL

Есть приложение WPF, которое работает с базой данных SQLВ App

195
Mysql выборка при совпадении в нескольких строках

Mysql выборка при совпадении в нескольких строках

Нужно выбрать id товарв у которого option_id(13) = value(3G) и option_id(57) = value(2 ГБ)

76
Fatal error: Uncaught Error: Call to undefined function data()

Fatal error: Uncaught Error: Call to undefined function data()

Почему выдаёт ошибку:

189
Шифрование в php и powershell. Получить один результат

Шифрование в php и powershell. Получить один результат

появилась задача зашифровать текст на сервере (php) и расшифровать его скриптом powershellПытаюсь найти общие функции для шифрования/дешифрования...

159