Задать вопрос
  • Как осуществить шифр цезаря в Telegram боте?

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

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

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

    Vindicar
    @Vindicar
    RTFM!
    То есть тебе нужно производитть манипуляции со свёрнутым окном другой программы?
    Если да, то ты реально не мог объяснить хуже...

    Попробуй пакет pywinauto, у него нет такого ограничения как у pyautogui.
    Ответ написан
  • Как сделать выдачу ролей с помощью реакций?

    Vindicar
    @Vindicar
    RTFM!
    Читай примеры в документации, а? Там это есть.
    Там нужно проверять не ctx, а ctx.emoji.
    Ответ написан
    Комментировать
  • Как разобраться с многопотоками в пайтоне?

    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 комментария
  • Как сделать, чтобы бот discord.py писал, что у него нету прав?

    Vindicar
    @Vindicar
    RTFM!
    Ну для начала
    async def rtest(ctx, *, member = discord.Member, role = discord.Role):

    Не "=" а ":". Это type hint, а не значение по умолчанию.
    discord.py сам преобразует указанные параметры в объекты Member и Role.
    Так что по идее достаточно будет написать
    await member.add_roles(role)
      await ctx.send("+")
    Ответ написан
  • Ошибка при получении пинга бота?

    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!
    Ну прочитай же внимательно сообщение об ошибке.
    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.

    У тебя бот просит интенты, которые не включены в настройках учётной записи бота (по ссылке).
    Либо умерь его аппетиты, запрашивая только те интенты, которые тебе реально нужны, либо включи их.
    Ответ написан
    Комментировать
  • Как спарсить таблицу python?

    Vindicar
    @Vindicar
    RTFM!
    Ищи все теги td. См. документацию по фильтрации в BS4.
    Содержимое тега будет лежать в свойстве .string у объекта тега. Можешь также посмотреть на атрибут class тега, доступный через ключ ['class']. На данном сайте он, похоже, обозначает позицию ячейки в таблице.
    Ответ написан
    Комментировать
  • Как сделать автоматический набор кода?

    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 комментария
  • DISCORD BOT sqlite3.OperationalError: near "#": syntax error почему такая ошибка?

    Vindicar
    @Vindicar
    RTFM!
    Не формируй SQL-запросы форматированием строк! Особенно если не знаешь SQL достаточно. Либо поймаешь ошибку синтаксиса, либо SQL-инъекцию.

    Используй placeholders, как показано в документации к модулю.

    import sqlite3
    
    con = sqlite3.connect(":memory:")
    cur = con.cursor()
    cur.execute("create table lang (name, first_appeared)")
    
    # This is the qmark style:
    cur.execute("insert into lang values (?, ?)", ("C", 1972))
    
    # The qmark style used with executemany():
    lang_list = [
        ("Fortran", 1957),
        ("Python", 1991),
        ("Go", 2009),
    ]
    cur.executemany("insert into lang values (?, ?)", lang_list)
    
    # And this is the named style:
    cur.execute("select * from lang where first_appeared=:year", {"year": 1972})
    print(cur.fetchall())
    
    con.close()
    Ответ написан
    Комментировать