• Как пофиксить пропажу интернета на убунте 20.04?

    @Stormx480 Автор вопроса
    Python Backend Developer
    Кароче говоря, всем спасибо за ваши комментарии и ответы, а так же за старание помочь.

    После всех манипуляций помогла банальная переустановка Ubuntu, и, заодно, обновление её с 20.04 до 20.10
    Ответ написан
    Комментировать
  • Как раздать отдельным кнопкам в списке разные свойства для кнопок телеграм бота?

    @Stormx480
    Python Backend Developer
    Смотри. Насколько я знаю в конструкторе класса ReplyKeyboardMarkup такое не предусмотрено.

    Но ты можешь вынести это в обработку логики самой кнопки.

    Когда человек нажимает на кнопку (обычную) он отправляет боту текст, который ты ловишь с помощью декоратора-хэндлера, для примера возьмем кнопку "Найти фильм':

    @bot.message_handler(regexp = 'Найти фильм')
    def find_film(message):
      pass


    Далее, нам надо добавить туда логику, что бы убиралась клавиатура после нажатия кнопки.
    Для этого есть класс ReplyKeyboardRemove.
    Воспользуемся им:

    @bot.message_handler(regexp = 'Найти фильм')
    def find_film(message):
      markup = telebot.types.ReplyKeyboardRemove()
      bot.send_message(message.chat.id, 'remove keyboard', reply_markup=markup)


    Таким образом, логику которую ты не можешь поместить в конструктор класса ReplyKeyboardMarkup - ты можешь вынести в функции обработчики.
    Ответ написан
    Комментировать
  • Какой ноутбук выбрать?

    @Stormx480
    Python Backend Developer
    Лучше возьми 13 дюймовый Matebook от Huawei.

    За такие деньги ничего лучше не найдешь. У меня 2 человека им пользуются, очень довольны.
    Как раз со скидкой 55к получается. Ну если что пару тысяч докинешь, не проблема думаю.

    По железу у него топ за такие деньги:

    QHD, Ryzen 5 3500u, 16gb DDR4, 512 gb nvme SSD

    Только бери новый, есть такой же мейтбук но старого образца, он не очень. А тут и дисплей пушка и начинка пушка.

    link
    Ответ написан
  • Как сохранить данные в словаре python?

    @Stormx480
    Python Backend Developer
    Не совсем понятно что вы хотите.

    Если вы хотите сохранить результат работы функции make_album (т.е. сохранить словарь который возвращает эта функция) то просто запишите вызов функции в переменную. Таким образом вы будете сохранять в эту переменную результат работы функции.

    album_1 = make_album('limp bizkit', 'golden cobra')
    album_2 = make_album('limp bizkit', 'take a look around')


    И будете записывать новые словари, потому что каждый раз в функции make_album вы создаете новую локальную переменную album, которую впоследствии возвращаете.

    Если я вас не правильно понял, уточните вопрос, и я помогу Вам с ответом.
    Ответ написан
    Комментировать
  • Зачем закрывать курсор и соединение к БД?

    @Stormx480
    Python Backend Developer
    Это называется устойчивой хорошей практикой, которая позволяет в будущем избежать большого кол-ва ошибок.

    Для начала надо определится с терминологией:

    cursor - Класс драйвера, через который происходит взаимодействие с базой данных.
    connection - Класс подключения к базе данных.

    У любой базы данных есть максимально допустимое кол-во подключений. Как и максимально допустимое кол-во открытых курсоров.

    Если не закрывать - вы рано или поздно упретесь в лимит.

    Так же, следует помнить, что транзакция начинается до выполнения запроса, и при определенных настройках бд, на момент выполнения транзакции таблицы лочатся, и не дают другим потокам или программам ими воспользоваться. По умолчанию транзакция создаётся до выполнения первого запроса к БД, и все последующие запросы выполняются в контексте этой транзакции. А длительные транзакции ни к чему хорошему не приводят.

    Так же нужно понимать что при создании подключения к базе данных у вас отжирается определенное кол-во оперативной памяти которое для этого необходимо. Если плодить много подключений - можно сожрать всю память.

    Так же в случае большой нагрузки и большого приложения, может закрасться какой нибудь баг и не закрываемые соединения могут попортить достаточно нервов.

    Если вы не хотите постоянно закрывать подключение и курсоры - вы можете оформить код через конструкцию with. Тогда подключение и курсор будут закрывать автоматически, после выполнения блока кода в конструкции.

    Как итог:

    1) Закрытие позволяет избежать ошибок, связанных с использование одних подключений в разных потоках.
    2) Не расстрачивает вашу оперативную память для создания ненужных подключений.
    3) Не забивает базу ненужными подключениями.
    4) Позволяет правильно распоряжаться транзакциями, и делать в определенной транзакции только определенные действия, а не пихать все в кучу.
    5) Вы не упираетесь в лимит подключений и не получаете ненужных об этом ошибок.
    6) Вы не получаете ошибок о том, что одно подключение пытается взаимодействовать с таблицей или данными, созданными в другом подключении, и залоченными или не расшаренными на данный момент.
    Ответ написан
    5 комментариев
  • Как сделать, чтобы telebot отправлял сообщения в группу не ссылаясь на его?

    @Stormx480
    Python Backend Developer
    Никак. Боты не начинают разговор сами. Воспользуйтесь клиентом. Библиотека telethon
    Ответ написан
    Комментировать
  • Как вытянуть ответ пользователя телеграмм боту и добавить его в переменную типа string?

    @Stormx480
    Python Backend Developer
    Либо добавь условный оператор, либо делай инлайн кнопки с коллбэками.
    Ответ написан
    Комментировать
  • Не срабатывает callback у inline keyboard в telegram боте. В чем может быть причина?

    @Stormx480
    Python Backend Developer
    А ловить сообщения то кто хэндлерами будет?
    Только у тебя updater а не хэндлер, но суть не меняется
    @bot.callback_query_handler(func=lambda c: c.data == 'callback')#Ловим коллбэк от кнопки. Нам передается объект CallbackQuery который содержит поле data и message. Сейчас нам нужно из даты достать наше слово которое мы передали в атрибуте callback_data
    def callback_answer(callback_query: types.CallbackQuery): #И отвечаем на него
        bot.answer_callback_query(
                callback_query.id,
                text='Hello! This callback.',
                show_alert=True
                )
    Ответ написан
    Комментировать
  • Почему Django-CMS не видит пользовательские CSS/JS?

    @Stormx480
    Python Backend Developer
    1. Попробуй точно указать путь BASE_DIR. У меня сделано так:
    BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

    2. В urls.py попробуй сделать так:
    urlpatterns = [
          somethingurls
    ]+static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)+static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

    Т.е. напрямую свяжи с переменной (мб поможет, ну у меня лично так сделано, и так рекомендуют сами разработчики джанги)

    3. Проверь наличие 'django.contrib.staticfiles' в переменной INSTALLED_APPS в settings.py

    4. Так же проверь наличие переменной
    STATICFILES_FINDERS = (
        'django.contrib.staticfiles.finders.FileSystemFinder',
        'django.contrib.staticfiles.finders.AppDirectoriesFinder',
    )

    в settings.py

    5. Ну и самое главное, не забудь импортировать статику в шаблон)
    {% load static %}

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

    Если не получится отпиши, будем дальше думать)
    Ответ написан
  • Как "прослушать" что передается по вебсокету, используя python?

    @Stormx480
    Python Backend Developer
    server_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM) - создаем
    server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) - настраиваем
    server_socket.bind(('localhost', 5000)) - ставим
    server_socket.listen() - слушаем


    Видео/

    в гугле забанили?)
    Ответ написан
  • Нужно хранить два-три поля данных, какой способ хранения выбрать?

    @Stormx480
    Python Backend Developer
    Vedis.
    Вот тут есть полноценный урок по тому как хранить состояния пользователя при работе с Telegram Bot'ом
    Ответ написан
    Комментировать
  • Как определить разное поведение Бота Telegram для разных пользователей?

    @Stormx480
    Python Backend Developer
    У тебя есть два бота. Бот А - для господина Админа, Бот Б - для бом...холопов.
    Вынеси каждый из ботов в отдельный файл, можешь так и назвать.
    В мэйн скрипте (где вебхук ставишь) сделай в самом начале проверку, можешь через декортатор
    If message.id == 'айди твоего админа':
    botadmin.Bot()
    else:
    botbomzh.Bot()

    Что то типо такого, думаю ты понял.
    Ответ написан
    Комментировать
  • Cоursera специализация по питону стоит времени или можно заменить другими источниками?

    @Stormx480
    Python Backend Developer
    Советую youtube канал Олега Молчанова, там есть замечательные уроки по Django, асинхронному программированию, системе контроля версий Git и методике ветвления Git-Flow, а так же все про тестирования и TDD. Для старта в программировании на python этого более чем достаточно. Сам лично учился по этим урокам.
    Ответ написан
    4 комментария
  • Какова вероятность получить идентичные последовательности?

    @Stormx480
    Python Backend Developer
    Ну если тебе нужно что бы этого не происходило ты можешь это ограничить. Сначала "заролять" одну функцию, потом другую с условием что бы результат не был равен результату предыдущей функции.

    Ну а вообще это все ограничивается теорией вероятности. Шанс что тебе выпадет одно число из 10 - 1/10 соответственно. Шанс что тебе выпадет одно и тоже число из 10 дважды - 1/10*10 = 0.01.
    Нужно понимать что шанс выпадения у любого элемента списка одинаковый. Т.е. шанс того что выпадет 5 такой же, как шанс того что выпадет 6. Соответственно для получения вероятности последовательности это все надо переумножить, формулу я уже не помню честно говоря, поищи в интернете. Ну попытаюсь логично подумать и просто возвести это все в 10 степень. т.е. 0.01^10 это будет примерно 1.0E-20

    Вот тут есть хорошая статья на тему теории вероятности и случайности. Примеры на игральных костях, но думаю Вам она сгодится, на досуге советую почитать, интересная вещь.
    Ответ написан
  • Как починить кодировку Atom python?

    @Stormx480
    Python Backend Developer
    5c420ecdbbc8e246559894.jpeg
    Нажимаешь - выбираешь нужную тебе кодировку - сохраняешь.
    UTF-8 стандарт, с ним ноль проблем.
    Ответ написан
    Комментировать
  • Model_id odoo синтаксис?

    @Stormx480
    Python Backend Developer
    Это внешний идентификатор модели.
    module. - название модуля в котором содержится модель
    model_ - префикс
    model_name - название модели.

    При использовании модели вне модуля, в котором определена модель, вам нужно определить модель как module_name.model_model_name - где вся эта конструкция формат для определения model_id.
    Ответ написан
    Комментировать
  • Для использования питона, как серверного языка, всё ровно придется ставить nginx или apache?

    @Stormx480
    Python Backend Developer
    Статья на эту тему о деплое Django проекта от компании-хостера Digital Ocean

    Но если коротко говорить то nginx - это веб-сервер, который может обрабатывать HTTP-запросы и может отправлять его на сервер WSGI, и сервер WSGI обрабатывает приложение django.
    У джанго есть встройка fastcgi, но тот же gunicorn как представитель WSGI-подобных серверов лучше потому что его родной
    почитайте о маршрутизации запросов от клиента к серверу, и решите какие методы для вас лучше. Не обязательно использовать именно nginx.
    spoiler
    "Все сводится к цели проекта Django и повышению эффективности, связанному с повторным использованием (в отличие от повторного использования колеса).

    Заявленная цель для Django - предложить инфраструктуру веб-приложений, которая обеспечивает быструю разработку и минимальный код. Оригинальный tagline был "основой веб-приложений для перфекционистов с предельными сроками".

    Эта цель может быть выполнена с помощью простого однопоточного веб-сервера, который просто упрощает разработку и тестирование.

    Цель Apache httpd, Nginx, IIS и т.д., с другой стороны, - предлагать исключительно масштабируемые и эффективные веб-серверы. Эти приложения очень настраиваются, поскольку все приложения отличаются друг от друга, и ни один из них не подходит для всех. Они также требуют различного опыта для проектирования, внедрения и обслуживания.

    Поэтому очень важно, что с ограниченными ресурсами (время разработчиков) команда Django предпочла сосредоточиться на структуре веб-приложений и оставить готовый веб-сервер к другому проекту."
    Ответ написан
    Комментировать
  • Как заставить multiprocessing работать?

    @Stormx480
    Python Backend Developer
    Вот тут есть хорошая статья по мульти-поточности в Python.

    Дополню своим примером, только что протестировал.

    spoiler
    import multiprocessing
    import os
    
    def worker():
        #worker function
        print ('Worker')
        x = 0
        while x < 1000:
            print(x)
            x += 1
        return
    
    if __name__ == '__main__':
        jobs = []
        for i in range(int(os.environ["NUMBER_OF_PROCESSORS"])):
            p = multiprocessing.Process(target=worker)
            jobs.append(p)
            p.start()


    С помощью модуля os узнаем кол-во процессов, и говорим программе работать с их кол-вом.
    Ответ написан
  • Как делать цепочки диалогов в Telegram Bot?

    @Stormx480
    Python Backend Developer
    Сразу скину ссылку на свою заготовку для моих ботов, там ответ есть но я поясню еще ниже Github

    Если ты внимательно следил за событиями прошлого года, то наверное знаешь что Роскомнадзор заблокировал телегу на территории РФ, поэтому для того что бы использовать соединение Long Polling (прим. - это соединение ты вызываешь при обращении к функции bot.polling()) тебе надо импортировать модуль apihelper и сделать соединение через прокси сервер (я использовал метод с SOCKS проксями, их бесплатно можно найти в самой телеге, там есть боты которые выдают, погугли.) и тогда все будет работать. Сейчас бот просто не может подключится к серверу телеграмм из за чего и выскакивает ошибка.
    Сам код для apihelper:
    spoiler
    from telebot import apihelper
    
    apihelper.proxy = {'http':'http://10.10.1.10:3128'}
    #или вариант с socks5
    apihelper.proxy = {'https':'socks5://userproxy:password@proxy_address:port'}


    И рекомендую выносить клавиатуры и повторяющиеся блоки кода в отдельные файлы и импортировать их куда надо, это сделает сам код читабельнее и чище, а разработку удобнее.
    А вообще глянь мой гитхаб там вроде бы неплохой пример бота, тебе чуть времени сэкономит.
    Удачи в разработке)

    Пы.Сы. - Офф. гитхаб библиотеки там был ответ на твой вопрос в разделе Proxy. Почитай документацию перед разработкой, це полезно.
    Ответ написан