• Как запустить залитый на хостинг 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()
    Ответ написан
    Комментировать
  • Возможно выполнение одного из нескольких декораторов в discord.py?

    Vindicar
    @Vindicar
    RTFM!
    Ну во-первых, если бы вы хоть немного представляли, что такое декоратор и как он работает, то идея с or вам бы в голову не пришла...
    А если бы покопались в документации, то нашли бы commands.check()
    def check_if_it_is_me(ctx):
        return ctx.message.author.id == 85309593344815104
    
    @bot.command()
    @commands.check(check_if_it_is_me)
    async def only_for_me(ctx):
        await ctx.send('I know you!')

    Очевидно, что внутри предиката (в примере он назван check_if_it_is_me) можно помещать самую разную логику проверок.
    Ответ написан
    Комментировать
  • Как указать тип данных Python?

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

    Vindicar
    @Vindicar
    RTFM!
    Ответ зависит от целого ряда факторов.
    1. Должна ли программа делать что-то ещё? Если да, то что именно?
    2. Сколько таких периодических методов будет существовать? Строго один, или может быть более? Должны ли у них быть разные периоды?

    Если программа синхронная, и метод только один, то можно использовать простой приём:
    import time
    
    stop = False
    def proc_to_call():
      global stop
      #Это твой периодический вызов
      #когда нужен останов, делаешь stop = True
      pass
    
    while not stop:
      time.sleep(60)
      proc_to_call()
    #код после цикла выполнится только после прерывания цикла.


    Если вызовов несколько и с разной периодичностью, то лучше использовать пакет schedule. Но у тебя всё равно будет бесконечный цикл вида
    while True:
        schedule.run_pending()
        time.sleep(1)

    И пока программа крутится в этом цикле, она не будет делать ничего другого.

    Если тебе нужно делать что-то параллельно с периодическим вызовом, то дело усложняется.
    Если твоя программа синхронная, то тебе потребуется отдельный поток выполнения.
    import threading
    
    class MyJob(threading.Thread):
      def __init__(self):
        super().__init__(self)
        self.stop = threading.Event()
    
      def proc_to_call(self):
        #Это твой периодический вызов
        pass
      
      def run(self):
        while not self.stop.wait(60):
          self.proc_to_call()
    
    job = MyJob()
    job.start()
    #код основного потока продолжает выполняться после этого
    #когда нужен останов, делаешь 
    job.stop.set() #сигналим об останове
    job.join() #ждём завершения потока

    Почему использую Event вместо простой логической переменной и time.sleep()? Потому что в случае с time.sleep() тебе придётся ждать конца минуты, прежде чем поток снова проверит логический флаг и поймёт, что пора останавливаться. А при использовании Event его установка тут же прервёт ожидание - и выйдет из цикла.

    А если твоя программа асинхронная, то всё упрощается, так как корутины уже могут чередовать своё выполнение, выполняясь "как бы параллельно". Можно использовать как schedule, так и простой цикл, просто не забывай использовать await asyncio.sleep() вместо time.sleep().
    Ответ написан
    3 комментария
  • Неправильное поведение Thread с target=lambda?

    Vindicar
    @Vindicar
    RTFM!
    У тебя в первом случае тело потока (лямбда) захватывает через замыкание не значение i, а ссылку на i.
    К моменту старта в первом случае i будет иметь другое значение.
    Вот почему нужно использовать args - как во-втором случае. Тогда происходит захват значения - не через замыкание, а через параметр.
    Ответ написан
    4 комментария
  • Не работает многопоточность?

    Vindicar
    @Vindicar
    RTFM!
    Thread(target=egz_checkden(), args=())

    Когда уже погромисты научатся различать результат вызова функции (со скобками) и ссылку на функцию (без скобок).
    У тебя сейчас Питон пытается выполнить egz_checkden(), чтобы получить её возвращаемое значение и использовать его в качестве target.

    И да, у тебя в egz_checkden() бесконечная рекурсия, пусть и медленная. Вылетит с переполнением стека, хотя и не сразу. Не делай так, используй нормальный цикл.
    Ответ написан
    4 комментария
  • Не получается сделать так, чтобы когда я писал !role @nick выдавалась роль. Чтобы я не писал, она выдаётся мне. И да, я чайник :)?

    Vindicar
    @Vindicar
    RTFM!
    member = ctx.message.author
    role = discord.utils.get(member.guild.roles, name='Egg')
    await member.add_roles(role)

    Сначала получаешь автора сообщения (т.е. отправителя команды), потом выдаёшь ему роль, потом удивляешься почему так.
    (К слову, а зачем делать это командой? через интерфейс дискорда в разы быстрее).

    Ну собственно,
    async def role(ctx):
    Ты вообще параметры у команды не принимаешь.
    Сделай так:
    async def role(ctx, target: discord.Member):
    Тогда discord.py попытается распарсить переданный аргумент как пользователя.
    Ответ написан
  • Как сделать запись в бд после обращения к ней?

    Vindicar
    @Vindicar
    RTFM!
    cur.execute(f'SELECT cal FROM {usern} ')
    (cal,) = cur.fetchone()
    Ты выбрал одну строку и не закрыл курсор. Может, дело в этом?
    Ответ написан
  • Как исправить декодировку json python?

    Vindicar
    @Vindicar
    RTFM!
    Значит, в файле cookies.txt не корректный JSON. Возможно, он вообще пуст?
    Ответ написан
    1 комментарий
  • Как изменить последний столбец в sqlite python?

    Vindicar
    @Vindicar
    RTFM!
    > Дело в том что у меня несколько строк с одним и тем же ключом
    Значит, у тебя нет первичного ключа в таблице, так как первичный ключ должен быть уникален.
    Исправляй структуру таблицы, чтобы был действительно уникальный ключ, тогда и проблем таких не будет.
    Ответ написан
    2 комментария