• NameError: name 'money' is not defined. Где ошибка?

    Доброго времени суток!
    NameError происходит потому, что переменная money действительно не определена. Насколько я понимаю, в вашем основном цикле:
    for event in longpoll.listen():
        ...

    не используется переменная users, нигде не происходит создания объекта класса User. А переменная money определена именно в этом классе. Из класса ее можно вызвать через
    self.money
    А извне:
    user.money
    Это только, если определена переменная user, т.е. присутствует строка
    user = User(...)
    Это и логично, ведь т.к. у вас нет экземпляра класса, вы не можете получить доступ к тому, что внутри.
    Отсюда и NameError.
    Ответ написан
    Комментировать
  • Как добавить в свою программу платную подписку?

    Здравствуйте. Запрашивать ключ с интервалом 1 месяц можно так:
    import calendar
    from datetime import date, timedelta
    
    today = date.today()
    days = calendar.monthrange(today.year, today.month)[1]
    next_month_date = today + timedelta(days=days)

    (Python3 | Как к дате прибавить месяц?)
    1. При вводе ключа записывать next_month_date в файл (желательно в бинарном виде, чтобы нельзя было поменять в notepad'е. Можно использовать pickle);
    2. При очередном запуске программы читать сохранённый файл с датой и сравнивать её с текущей;
    3. Если 1 месяц прошел, то переходить к п.1. Если нет - запускать основную программу

    Отвечаю на Ваш второй вопрос (про распознавание 'своих' ключей).
    Можно создать хэши (наподобие SHA) для всех ключей и хранить их в другом файле (можно в текстовом). При вводе ключа (перед выполнением п.1) вычислять хэш введённого ключа и пытаться найти его в файле с хэшами. Если он там есть - прекрасно, переходим к п.1. Если нет - показываем сообщение об ошибке.
    Ответ написан
    Комментировать
  • Найти лучший способ добраться из координаты 0,0 до левого нижнего угла в матрице N на M?

    Для каждого шага необходимо выбирать лучший вариант между вариантами вниз и направо. Т.е. сравнивать числа снизу и справа и выбирать наибольшее/наименьшее. Это ПОЧТИ всегда даёт правильный ответ (может давать ошибочный ответ, если числа снизу и справа равны).
    Ответ написан
    Комментировать
  • Можно проверить, функция снаружи или в классе?

    Да, возможно. Если есть функция func и класс Test, то:
    if func in dir(Test):
        print("yes")
    else:
        print("no")

    Но если вы хотите эту проверку запихнуть в функцию класса Test, то первая строка будет такой:
    if func in dir(self):
    Ответ написан
    Комментировать
  • Как выбрать другой метод загрузки в YoutubeDL?

    Лучше загружать видео с YouTube через библиотеку pytube. Она работает немного быстрее, чем youtube_dl. Да и кода писать всего одну строчку (не считая импорта и input'а).
    from pytube import YouTube
    link = input()
    YouTube(link).streams.first().download()
    Ответ написан
    Комментировать