Ответы пользователя по тегу Python
  • Как сделать завершение команды?

    Vindicar
    @Vindicar
    RTFM!
    > message.from_user.id != [905259209, -1001486872541]:
    Выучи основы питона сначала, а? Потом уже возьмёшься за ботописание.

    Проверка вхождения значения в коллекцию выполняется оператором in. Для проверки не-вхождения есть оператор not in.
    message.from_user.id not in [905259209, -1001486872541]:
    Ответ написан
    8 комментариев
  • Как исправить ошибку в Tkinter?

    Vindicar
    @Vindicar
    RTFM!
    У тебя нет такой строки в приведённом коде. Проверь, какой файл ты запускаешь.
    Ответ написан
  • Куда отправляется информация из телеграмм ботов?

    Vindicar
    @Vindicar
    RTFM!
    Заведи приватный телеграм канал, куда имеют доступ только менеджеры, пусть бот постит туда.

    Либо можно сделать простой сайт только для внутреннего пользования, на том же Flask или DJango, и связать с ботом через общую БД.
    Ответ написан
    1 комментарий
  • Как открыть exe файл для чтения через python?

    Vindicar
    @Vindicar
    RTFM!
    Открой в режиме чтения байтов, каждые N=1,2,4 байтов переведи в шестнадцатеричную систему.
    Вопрос только - зачем? Структуру exe ты так не увидишь.
    Ответ написан
  • Как сделать, чтобы бот ждал сообщение от пользователя который отправил команду?

    Vindicar
    @Vindicar
    RTFM!
    Ну очевидно, бот должен запоминать, какие пользователи ввели команду, и если сообщение не от одного из них - то игнорировать это сообщение и ждать снова.

    С другой стороны, подумай - может, можно вообще уйти от этой системы со 100500 сообщений, и обойтись параметрами команды?
    Ответ написан
    Комментировать
  • Как осуществить шифр цезаря в Telegram боте?

    Vindicar
    @Vindicar
    RTFM!
    Причем тут вообще input()? Эта функция занимается только вводом из консоли.
    То же самое с print(), это исключительно консольный вывод.

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

    Иначе нужно будет разобрать входящее сообщение (оторвать от начала команду), и шифровать его.
    Ответ написан
  • Как разобраться с многопотоками в пайтоне?

    Vindicar
    @Vindicar
    RTFM!
    btn2=tk.Button(frame, text="start AutoClicker", bg="white", padx="50", pady="10")

    А почему тут должно что-то происходить? Я не вижу в твоем коде назначения обработчика щелчку по этой кнопке.
    Ответ написан
    5 комментариев
  • Как можно передавать мегабайтные данные через сокет?

    Vindicar
    @Vindicar
    RTFM!
    recv() вернёт пустой байт-массив только в одном случае - если другая сторона закрыла соединение на передачу данных (ну или в обе стороны).
    Из твоего описания не очень понятно, ожидаешь ли ты закрытия соединения, или какого-то маркера конца сообщения, или вообще сообщения известной длины.
    Также, что произойдёт, если передаваемые данные имеют длину ровно 4096 байт?
    Если принимаешь данные до конца, то тогда можно упростить код приёма данных до чего-то вида
    msg_parts = ""
    while True:
      part = conn.recv(4096)
      if part:
        msg_parts += part.decode() #по умолчанию это ascii. 
        #С многобайтными кодировками типа utf-8 могут быть проблемы, 
        #если многобайтный символ будет разбит границей пакета
        while "\n" in msg_parts:
          line, _, msg_parts = msg_parts.partition("\n")
          yield line + "\n" 
      else:
        break
    yield msg_parts

    Ну или в новом питоне можно еще короче

    msg_parts = ""
    while part := conn.recv(4096):
      msg_parts += part.decode() #
      while "\n" in msg_parts:
        line, _, msg_parts = msg_parts.partition("\n")
        yield line + "\n" 
    yield msg_parts
    Ответ написан
    3 комментария
  • Ошибка при получении пинга бота?

    Vindicar
    @Vindicar
    RTFM!
    from discord.ext.commands import bot
    Что это за импорт и зачем он тебе? Это внутренний модуль bot, а не объект bot, которым ты рулишь и про который говорится в доках.
    import discord
    from discord.ext import commands
    
    intents = discord.Intents.default()
    bot = commands.Bot(command_prefix='!', intents=intents)
    Ответ написан
    Комментировать
  • Почему у меня не создаться задача?

    Vindicar
    @Vindicar
    RTFM!
    Подозреваю, что дело в синхронном input(). Пока код стоит в нём, другие корутины не выполняются.
    В прииинципе можешь схитрить и использовать run_in_executor().
    Грубо говоря, он позволяет вынести длительный синхронный код в отдельный поток, и завернуть это в обычный task. Так что с точки зрения остальной програмы код становится как бы асинхронным.

    EDIT: а ещё есть пакет aioconsole - как раз для таких вещей.
    Ответ написан
    Комментировать
  • Как заставить бота отправлять сообщение раз в 30 секунд, Python Aiogram?

    Vindicar
    @Vindicar
    RTFM!
    Ну во-первых, зачем тебе 2 main-блока?
    При этом обрати внимание, что первый main-блок не закончит работу, пока не закончит работу твоя корутина helloworld(), так как ты используешь метод run_until_complete(). А твоя корутина никогда не закончит работу.
    Используй loop.create_task(), чтобы запланировать выполнение корутины "в свободное время" работы системы и продолжить работу.
    if __name__ == '__main__':
      loop.create_task(helloworld())
      executor.start_polling(dp, skip_updates=True)


    Во-вторых, длительные синхронные операции в корутине блокируют её работу, и работу остальных корутин. Это основы асинхронного прогарммирования, блин!
    Поэтому твой time.sleep() вешает всего бота. Используй await asyncio.sleep(), она отдаст управление другим корутинам бота на время сна текущей корутины.
    Ответ написан
    Комментировать
  • Как запустить залитый на хостинг Python скрипт при переходе по ссылке?

    Vindicar
    @Vindicar
    RTFM!
    Скрипт должен запускаться на каком компе? На хостинге? Т.е. тебе, грубо говоря, нужен сайт на питоне? Смотри в сторону Flask, он простой и понятный. Ну и хостинг ищи. На худой конец можно арендовать виртуалку (VPS) и поставить нужное ПО туда.

    А вот если на компе кликнувшего, ну извини, не судьба. Если клиент решить скачать и запустить твой скрипт, то другое дело.
    Ответ написан
    Комментировать
  • Как сделать автоматический набор кода?

    Vindicar
    @Vindicar
    RTFM!
    Используй методы формальных грамматик (термин для гугла).
    Представим генерируемый текст как последовательность символов (символ != буква).
    У нас есть терминальные символы - это строки, которые будут встречаться в итоговом тексте. Например: "if", "for", ":"
    У нас есть нетерминальные символы - это обозначения сущностей в тексте. Например: ПРИСВАИВАНИЕ, ВЕТВЛЕНИЕ, ОПЕРАТОР, КЛАСС
    У нас есть аксиома - нетерминальный символ, с которого мы начинаем генерацию. Например, ПРОГРАММА.
    И, самое главное, у нас есть правила замены одних символов другими.
    Например:
    ПРИСВАИВАНИЕ = ПЕРЕМЕННАЯ "=" ВЫРАЖЕНИЕ

    Один символ может заменяться по нескольким правилам - выбор случаен (возможно с некоторым весом?)
    ВЕТВЛЕНИЕ = "if" ВЫРАЖЕНИЕ ":\n" ОТСТУП+ ОПЕРАТОРЫ ОТСТУП-
    ВЕТВЛЕНИЕ = "if" ВЫРАЖЕНИЕ ":\n" ОТСТУП+ ОПЕРАТОРЫ ОТСТУП- "else:\n" ОТСТУП+ ОПЕРАТОРЫ ОТСТУП-

    Чтобы генерировать цепочки символов, используй рекурсию. Первое правило продолжает цепочку, второе - прерывает.
    ОПЕРАТОРЫ = ОПЕРАТОРЫ "\n" ОПЕРАТОР
    ОПЕРАТОРЫ = ОПЕРАТОР

    Тебе также потребуется хранить некое глобальное состояние - использованные имена функций и переменных, текущий отступ, и т.п. То есть у тебя замена символа может требовать дополнительной логики, как для ОТСТУП+ и ОТСТУП-.

    Правила замены применяются до тех пор, пока в цепочке символов остался хотя бы один нетерминал.
    Ответ написан
  • Рандом телеграм бот генерирует результат, а потом ленится и выдает повтор, как исправить?

    Vindicar
    @Vindicar
    RTFM!
    random_team0 = random.choice(man) + ' из ' + random.choice(place)
    random_team1 = random.choice(prilag) + ' ' + random.choice(such)
    team_name = [random.choice(team), random_team0, random_team1]

    Этот код выполняется один раз при запуске бота, а не каждый раз при выполнении team(). Внеси его внутрь подпрограммы team().
    Ответ написан
    Комментировать
  • Не открывается окно tkinter?

    Vindicar
    @Vindicar
    RTFM!
    root.mainloop()
    Ответ написан
    Комментировать
  • Как сделать проверку ссылки в телеграм боте?

    Vindicar
    @Vindicar
    RTFM!
    Если вы не знаете, как искать наличие подстроки в строке (либо через оператор in, либо через метод index()), или как пользоваться регулярными выражениями, то вам рано браться за ботов. Начните с упражнений попроще, потом вернётесь к теме.

    Вот кроме шуток. Это основы стандартной библиотеки языка. Прежде чем бросаться что-то разрабатывать - их надо знать, хотя бы на уровне возможностей, т.е. "я не помню, как называется метод для перевода строки в нижний регистр, но я точно знаю, что он есть, пойду поищу".
    Ответ написан
    Комментировать
  • Выдает ошибку "int() argument must be a string, a bytes-like object or a real number, not 'NoneType' ", что делать?

    Vindicar
    @Vindicar
    RTFM!
    number=print(input("сколько человек в каждой команде? "))

    print() всегда возвращает None. Нафиг он вообще тут?
    Ответ написан
    Комментировать
  • Discord bot не начинает воспроизведение трека, что не так?

    Vindicar
    @Vindicar
    RTFM!
    Телепаты на карантине, так что придётся тебе самому раздобывать сообщение об ошибке.
    Например, с помощью модуля traceback. Импортируешь его, а потом в except пишешь что-то вроде
    except:
            await ctx.send("Не удалось выполнить команду:\n" + traceback.format_exc())


    Вообще except, который даже не пишет сообщение об ошибке ни в журнал, ни куда-то ещё - хуже чем бесполезен. Никакой возможности понять, что случилось и где это случилось.
    Ответ написан
    3 комментария
  • Как указать тип данных Python?

    Vindicar
    @Vindicar
    RTFM!
    Если нужно указать типы в своём коде - используй type hints.
    Если нужно в чужом - найди/напиши stub-файлы.
    Ответ написан
    Комментировать