Ответы пользователя по тегу Python
  • -1 / unknown wget неизвестная ошибка?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Это bar function пишет. Самый простой способ - заменить её на фейковую, которая ничего не делает и не возвращает (кажется, в библиотеке нет собственной заглушки для этого):

    wget.download(url, bar=lambda x,y,z:None)

    Но в целом нет смысла использовать старую библиотеку из 2015 года, лучше освоить что-то более современное, например, requests.
    Ответ написан
    Комментировать
  • Как боту изменить сообщение?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    message в этой функции - это сообщение пользователя, который написал /start. Дальше бот пытается редактировать это сообщение... и не получается! Конечно, ведь он может редактировать только свои сообщения, а чужие не может.

    Он должен просто редактировать своё сообщение, а не сообщение пользователя:

    my_new_message = await bot.send_message(message.chat.id, 'Ждем: 2сек')
    await sleep(1)
    await bot.edit_message_text(chat_id=message.chat.id, message_id=my_new_message.message_id, text='Ждем: 1сек')
    ...
    Ответ написан
    Комментировать
  • Ошибка пайтон библа дискорд пай что делать?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Рекоммендую отказаться от discord_slash и перейти на потомков discord.py 2.0 (который так и остался в alpha и в pypi не опубликован) в виде форков discord.py, в которых slash commands работают из коробки. Мои эксперименты показали, что discord_slash ломает часть функциональности discord.py, и разбираться, что там пошло не так, я посчитал малоосмысленным. Я протестировал pycord, nextcord и disnake и остановился на последнем как наиболее развитом (по состоянию на декабрь было именно так), но свой выбор не навязываю.

    Нужно будет всего лишь заменить декоратор @bot.command на @bot.slash_command, очень удобно и никакого мазохизма.
    Ответ написан
    Комментировать
  • Почему не отображается миниатюра результата Inline-запроса?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Ссылка на файл на серверах Telegram - это плохо. Во-первых, она содержит токен бота (может утечь), во-вторых, она может меняться со временем. В большинстве ситуаций полагается передавать file_id, но для thumb_url надо передавать именно URL. Так что увы - придётся самому куда-то публиковать картинки.

    Скачивание файла вызывает заголовок Content-Disposition ответа.
    Ответ написан
    Комментировать
  • Как научить чат-бота в телеграм воспринимать буквы?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Я пришлю тебе

    '';drop table config;select bitcoin from config

    И таблица config будет удалена. Это называется SQL-инъекцией.

    Ты не оборачиваешь строку в кавычки, разумеется, ничего хорошего не получится. В случае цифр, конечно, запрос без кавычек выполняется успешно. Но вообще это неправильный способ использования SQL, так как любая кавычка его сломает, а тщательно подготовленный текст (пример я привёл) вообще вызовет не тот запрос, который планировался.

    Правильно использовать плейсхолдеры:

    q.execute("UPDATE config SET bitcoin=? WHERE id=?", (new_bitcoin, user_id))


    В этом случае база данных сама правильно всё подставит и выполнит.
    Ответ написан
    Комментировать
  • Как сделать APK file?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Нельзя просто так портировать интерфейс настольной программы в мобильное приложение. Там всё просто иначе устроено. Кроме того, скриптовые языки не очень удобны для мобильных приложений. Обычно на python делают с помощью Kivy (рекомендую ознакомиться и попробовать оценить на простых примерах).
    Ответ написан
    Комментировать
  • Как сделать рассылку юзерам телеграм-бота на python?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Можно просто запустить другой скрипт, который создаст объект телебота с тем же токеном, но не будет использовать polling, а сразу вызовет send_message сколько нужно раз. Но надо не забывать про rate limit.

    PS: Почему тут каждую неделю спрашивают про рассылку ботом по списку? Неужели нет более интересных учебных задач?
    Ответ написан
    3 комментария
  • Не работает код, ошибок нет, что делать?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Зачем тут вообще вызывать get_channel? Быстрее и нагляднее будет проверка:

    if ctx.channel.id == 7тут айди канала:

    Обычно даже тривиальные команды не работают, если есть обработчик on_message, что с этим делать в официальным FAQ описано первым же пунктом: https://discordpy.readthedocs.io/en/stable/faq.htm...
    Ответ написан
    Комментировать
  • В чем разница между Client и Bot?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Обычно бот создаётся либо как экземпляр класса discord.Client, либо как порождённого от него класса discord.ext.commands.Bot. Как называть переменную, в которую будет присовоен этот экземпляр - вопрос вкуса.
    Ответ написан
    Комментировать
  • Как получить ответ от сервера в читабельной кодировке (utf-8)?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    \uXXXX - это вполне валидные с точки зрения json unicode-символы. Модуль json делает их по умолчанию, чтобы не делал, надо json.dump/json.dumps передавать параметр ensure_ascii=False:

    >>> print(json.dumps(["Превед!"]))
    ["\u041f\u0440\u0435\u0432\u0435\u0434!"]
    >>> print(json.dumps(["Превед!"], ensure_ascii=False))
    ["Превед!"]
    Ответ написан
    Комментировать
  • Как убрать дробную часть, не округляя число?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Самый лёгкий способ безо всяких приведений к строке: умножить на 10, округлить вниз, разделить на 10.

    x = 0.19123809523809523
    y = math.floor(x*10)/10
    print (y) # 0.1


    Но не очень понимаю смысл такого действия. Ведь 0.19 по сравнению с 0.1 это почти в два раза разница...
    Ответ написан
    Комментировать
  • Traceback (most recent call last): File "botrun.py", line 14, in Как исправить?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Он же всё пишет:

    discord.errors.PrivilegedIntentsRequired: Shard ID None is requesting privileged intents that have not been explicitly enabled in the developer portal. It is recommended to go to https://discord.com/developers/applications/ and explicitly enable the privileged intents within your application's page. If this is not possible, then consider disabling the privileged intents instead.

    При создании бота запрошены privileged intents, но они не были включены в Developer Portal. Их надо включить, либо (что лучше) убрать из кода intents до тех пор, пока они не будут действительно нужны.
    Ответ написан
    1 комментарий
  • TypeError: __init__() missing 1 required positional argument: 'command_prefix' Как исправить?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Параметр называется command_prefix, а не commands_prefix.
    Ответ написан
    3 комментария
  • Как запустить нескольких ботов на одном скрипте через webhook?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Нужно поднять веб-сервер, который будет обрабатывать ссылки навроде /bot-callback/токен-бота, а при создании бота делать setWebhook с его токеном и правильным callback. В обработчике коллбэка по токену определять бота, а затем вызывать от соответствующего инстанса бота в Своей Любимой Библиотеке функцию обработки событий (например, в телеботе это метод process_new_updates).

    Старая история
    Был такой вопрос https://qna.habr.com/q/943325

    В нём есть ссылка на уже несуществующий пример с использованием aiogram, где из URL брался токен, а дальше это обрабатывалось каким-то кодом типа:

    with bot.with_token(parsed_token) as bot1:
      ... действия с bot1


    К сожалению, я не запомнил подробностей.
    Ответ написан
  • Как сделать вход по почте и и паролю ,а не токену?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Это нельзя сделать. В библиотеке можно авторизоваться только по токену и никак иначе. Дискорд при авторизации может показать капчу, поэтому по логину-паролю войти нельзя.
    Ответ написан
    Комментировать
  • Ошибка в коде,как исправить?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Поскольку login - это метод класса, то в него передаётся неявно параметром сам экземпляр класса (параметр self):

    async def login(self, token, *, bot=True):

    То есть, фактически, этот метод неявно вызывается как login(client, '**', '376...').
    Ответ написан
  • Как сделать так, чтобы каждые 10 минут дискорд бот отправлял сообщение?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    В discord.py есть свой механизм для выполнения регулярных задач:

    from discord.ext import tasks
    
    @tasks.loop(seconds=600)
    async def notify_task():
        await bot.wait_until_ready()
        ... нужные действия
    
    notify_task.start()
    bot.run(config.BOT_TOKEN)


    Но ничто не мешает запустить отдельный asyncio-task с циклом (и, разумеется, asyncio.sleep вместо time.sleep) и своими силами.
    Ответ написан
  • Как запустить параллельно две функции?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Либо треды, либо асинхронность.
    Ответ написан
    3 комментария
  • Как мне можно ввести команду ну @client.command() чтобы он не выдовал ошибку но ивенты работали?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    1. Почему два обработчика on_message? Должен быть один.

    2. client.command - метод класса не discord.Client, а discord.ext.commands.Bot. Перепиши на этот класс - он наследует discord.Client и все его методы поддерживает.

    3. При наличии on_message команды сломаются, его или убрать, или правильно добавить обработку команд, см. https://discordpy.readthedocs.io/en/latest/faq.htm...
    Ответ написан
  • Есть ли библиотеки для серфинга по бразеру без граф. Оболочки? selenium без граф. оболочки, что то между selenium и requests?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Если нужно выполнять прямые запросы - requests. Придётся самостоятельно разобраться в устройстве сайта, в том числе в динамически генерируемом контенте.

    Если надо изображать настоящий браузер с js - selenium.

    Никакого волшебного аналога selenium "без браузера" не существует и не может существовать, ведь он должен имитировать полноценный браузер с окном, документом, скриптами и css, а без настощего браузера (хотя бы headless) этого не достичь.
    Ответ написан
    Комментировать