• Есть ли наказание за радужные роли дискорд?

    Vindicar
    @Vindicar
    RTFM!
    Бота может вырубить за флуд, разве что. Да и вырвиглазно это.
    Ответ написан
    Комментировать
  • Не могу решить задачу в питоне с помощью zip?

    Vindicar
    @Vindicar
    RTFM!
    Ну zip() тут ни к селу ни к городу... но в принципе можно использовать.
    1. Введи строку.
    2. Разбей на слова (split() в помощь)
    3. Найди такое наибольшее N, что длина списка слов больше N*N. Т.е. если в списке 6 слов, то N будет 2, так как при N = 3 нам понадобится 9 слов для таблицы. Найти можно просто, извлеки корень из длины списка и отбрось дробную часть.
    4. Построй список списков. Каждый элемент (т.е. каждый вложенный список) будет одним столбцом таблицы, и будет иметь длину N. Т.е. если оригинальный список слов будет words, то мы получим
    columns = [ words[0:N], words[N:2*N], words[2*N:3*N], ... ]
    и так далее. Так как число вложенных списков равно N, т.е. заранее неизвестно, это нужно будет сделать циклом.
    5. Сделай цикл вида for row in zip(*columns):, тогда у тебя zip() возьмёт сначала первый элемент каждого столбца, и скомпонует из них кортеж row. Потом второй из каждого, потом третий, и т.д.
    6. Строки из каждого кортеж row нужно вывести, разделив пробелом. Тут можно метод str.join() использовать.
    Ответ написан
    Комментировать
  • Как наложить одно изображение на другое в телеграмм боте?

    Vindicar
    @Vindicar
    RTFM!
    Подозреваю, что file - это файловый объект, а не файл на диске. Так что file_path не соответствует никакому пути на твоей машине.
    Ответ написан
  • Возможно как-то запускать ffmpeg не через консоль?

    Vindicar
    @Vindicar
    RTFM!
    К сожалению, большинство библиотек для работы с ffmpeg тупо запускают экзешник с параметрами, тем самым наследуя все его косяки. Так что особого выигрыша тут нет.
    Гипотетически ты мог бы попытаться взять libffmpeg-c или аналог, скомпилировать под нужную тебе платформу (DLL для винды, so для линукса) и использовать модуль ctypes для работы с ней. Но это, боюсь, будет ещё сложнее.
    Ответ написан
    2 комментария
  • Почему or в python не работает?

    Vindicar
    @Vindicar
    RTFM!
    Потому что ты не понимаешь как работает or.
    И не ты первый. Мне вот реально интересно, откуда вообще берётся идея, что логический (в первую очередь) оператор можно использовать таким образом? Машинный перевод с русского на питон, что ли? "Если айди равен тому ИЛИ этому"?
    И что ты пытался сделать? Проверить, что iduser не равно ни одному из указанных id? Так тогда тебе не or нужен.
    if iduser != АЙДИ1 and iduser != АЙДИ2:
    Если айдишек много, практичнее будет in.
    if iduser not in [АЙДИ1, АЙДИ2]:
    Ответ написан
  • Почему при запуске бота пишет ошибка sqlite3.OperationalError: near "bazaa": syntax error?

    Vindicar
    @Vindicar
    RTFM!
    В коде каша. С одной стороны, вроде знаешь про плейсхолдеры, но не синтаксис SQL:
    cursor.execute('INSERT OR IGNORE bazaa (user_id, user_name, username) VALUES (?, ?, ?)', (user_id, user_name, username))

    А в другом месте кода с точностью до наоборот.
    INSERT INTO USERS (user_id, username, first_name,  last_name) VALUES ({user}, "{username}", "{first_name}", "{last_name}", "{ctime()}");

    Почитай про синтаксис INSERT и ON CONFLICT и никогда не формируй запросы форматированием строк.
    Ответ написан
  • Как проверить неопределенное количество элементов?

    Vindicar
    @Vindicar
    RTFM!
    Если each - это список, то тогда составь множество строк, соответствующих каждому элементу each.
    Ты не написал, что такое self.strs, так что приходится использовать его.
    strs_each = set( sefl.strs[e] for e in each )
    А дальше просто, если длина strs_each больше 1, то есть разные строки.
    Ответ написан
    1 комментарий
  • Сan only concatenate list (not "str") to list?

    Vindicar
    @Vindicar
    RTFM!
    s2 = values+'@'+keys
    values будет списком, keys (почему keys, когда это отдельный ключ?) - строкой, как и '@'. Собственно, тебе ошибка про это и говорит.
    Что ты вообще ожидал получить в s2?
    Ответ написан
    Комментировать
  • Как добавить парсер в дискорд бот?

    Vindicar
    @Vindicar
    RTFM!
    n = print(item['name'])
    В-первых, ничего не выводит куда?
    Во-вторых, print() выводит данные в стандартный вывод, обычно в консоль. В дискорд через неё ничего не послать.
    Во-третьих, print() всегда возвращает None. Так что n всегда будет None, и присваивание не имеет смысла.
    В-четвертых, почему не использовать нормальный обработчик команд из discord.ext.commands.Bot? Он тоже позволяет реагировать на сообщения, в придачу к остальным полезностям именно для бота. Это при условии, что ты хочешь именно реакцию на сообщение и не согласен обойтись обычной командой.
    В-пятых, если ты не уверен, что такое print(), почему ты пытаешься писать ботов?

    Ну про мелочи, вроде "бот парсит игры только при запуске, и не обновляет информацию в дальнейшем" я не говорю...
    Ответ написан
    Комментировать
  • Как развернуть окно консоли или закрепить его поверх окон при помощи python?

    Vindicar
    @Vindicar
    RTFM!
    Если под Windows, то придётся использовать WinAPI.
    GetConsoleWindow() чтобы получить дескриптор окна консоли.
    SetForegroundWindow() чтобы сделать это окно активным.
    SetWindowPos() вообще для перемещения/изменения размеров окна, но также имеет параметры для задания окна "поверх всех".
    Для вызова функций WinAPI из-под питона смотри модуль ctypes.
    Ответ написан
    Комментировать
  • Что значит check_same_thread? В Python sqlite3?

    Vindicar
    @Vindicar
    RTFM!
    sqlite3 не потоко-безопасна - если ты одновременно обращаешься к базе из нескольких потоков, это может запороть базу.
    Соответственно, по умолчанию библиотека проверяет, что подключение к базе используется тем же потоком, который создал этот подключение - т.е. что оно ограничено рамками одного потока. Если это не так, выбрасывается исключение. Это поведение по умолчанию, чтобы новички потом не плакались "почему у меня иногда база портится?!!"

    Но если ты очень осторожен и не допускаешь одновременных запросов (с помощью синхронизации по мьютексу. например), то можно безопасно использовать одно подключение из нескольких потоков. Тогда можно сказать sqlite "не дергайся насчёт потоков, я знаю что делаю". Вот эту возможность (подавить проверку) и предоставляет параметр check_same_thread = False.
    Ответ написан
    Комментировать
  • Как реализовать программу, с возможностью добавления команд из UI?

    Vindicar
    @Vindicar
    RTFM!
    Хранить список команд в каком-то хранилище, очевидно.
    Формат хранилища - на твоё усмотрение.
    ini файл легко правится пользователем (при необходимости), но ограничен в сложности структуры (секции - значения, два уровня).
    json файл менее человеко-читаем, но поддерживает произвольную вложенность (можно представить дерево объектов).
    БД типа sqlite не человеко читаема от слова "совсем", но позволяет формировать более сложные структуры чем дерево.

    С учётом специфики задачи, я бы посоветовал json.
    Ответ написан
    Комментировать
  • Как удалить русские буквы в текстовом файле?

    Vindicar
    @Vindicar
    RTFM!
    Только русские? А что насчёт иероглифов? Или речь о всех символах, не входящих в ASCII?
    В первом случае:
    import re
    s = "privet брат"
    s1 = re.sub('[а-яё]', '', s, flags=re.I)

    Во-втором случае:
    s1 = s.encode('ascii', errors='ignore').decode('ascii')
    Ответ написан
    2 комментария
  • TypeError: 'NoneType' object is not subscriptable где ошибка?

    Vindicar
    @Vindicar
    RTFM!
    role_id = {}".format(role.id)

    За такое бьют по рукам, так как стоит тебе попытаться подставить так строку - начнутся проблемы. Синтаксис подстановки параметров для кого придумали?

    А по вопросу: с какого перепуга ты взял, что у тебя запрос обязательно вернёт хоть одну строку?
    А если ни одной строки не вернулось, что fetchone() вернёт None. От которого ты потом берешь нулевой индекс.
    Вбей в консоли питона None[0] и сравни ошибку со своей.
    Так что сначала вытащи результаты fetchone() в отдельные переменные, проверь их на None, и только потом делай с ними что нужно.
    Ответ написан
    2 комментария
  • Как разделить слова в сообщении telebot?

    Vindicar
    @Vindicar
    RTFM!
    По идее, можно потребовать вводить строку в виде "Петров Иван Иванович 01.01.2000", а потом резать по пробелам.
    Но это будет провоцировать ошибки пользователей - раз, и это будет спотыкаться на некоторых именах (пусть даже Абдурахман ибн Хоттаб) - два.
    Я бы посоветовал не разбивать имя на куски без необходимости.
    Ответ написан
    4 комментария
  • Программа, конверирующая физ. изображения в цифру?

    Vindicar
    @Vindicar
    RTFM!
    если у кого-то есть уже готовая программа, то буду премного благодарен

    За такое здесь посылают на фриланс с формулировкой "задание, а не вопрос", потому что...
    реализовывать ее с нуля ну совершенно нет желания

    ...нет никакого желания бесплатно делать работу за других.

    Далее, C# подразумевает, что работа со сканером ведётся под виндой, так? Можешь посмотреть в сторону Windows Image Acquisition (WIA), это не лучший способ, но умеренно сложный и универсальный. Могу подсказать классы, на которые стоит обратить внимание:
    • WIA.DeviceManager и WIA.DeviceInfo чтобы перечислить доступные устройства ввода
    • WIA.Device для представления отдельного устройства
    • WIA.Item для представления отдельного компонента устройства, съём изображений производится с него
    • WIA.IProperties и WIA.Property для задания настроек сканирования
    • WIA.CommonDialog для показа диалогового окна "идёт сканирование", метод ShowTransfer()
    • Результат получишь как WIA.ImageFile, смотри в сторону метода get_BinaryData(), чтобы получить содержимое файла изображения в заданном формате. Дальше этот файл либо сбрасываешь на диск, либо пишешь в MemoryStream и загружаешь оттуда в System.Drawing.Bitmap.

    Во всяком случае, я так делал, когда мне потребовалось решить эту задачу.
    Ответ написан
    1 комментарий
  • Как включить привилегированные намерения намерения на портале разработчика Discord?

    Vindicar
    @Vindicar
    RTFM!
    Документацию читал?
    1. Make sure you’re logged on to the Discord website.
    2. Navigate to the application page.
    3. Click on the bot you want to enable privileged intents for.
    4. Navigate to the bot tab on the left side of the screen. discord_bot_tab.png
    5. Scroll down to the “Privileged Gateway Intents” section and enable the ones you want. discord_privileged_intents.png
    Ответ написан
    1 комментарий
  • Как записать в csv список python (состоит из предложений с разными символами)?

    Vindicar
    @Vindicar
    RTFM!
    Хммм, так, ещё разок. Тебе нужно сделать из спискамногострочных текстов csv, и каждый фрагмент текста должен быть отдельным значением в одном и том же "столбце", так?
    Вообще я бы поискал возможность избежать его использования - csv не умеет работать с многострочными текстами. Тебе придётся либо как-то экранировать символы перевода строки. Более того, нет никаких гарантий, что в тексте не встретятся служебные символы для csv (кавычки, запятые, точки с запятой).
    Питон имеет несколько модулей для работы с БД, как встроенных так и сторонних. Нет ли возможности импортировать данные немедленно?
    Если нет, нельзя ли попробовать использовать другой формат? Скажем, формат .sql файлов позволяет экранировать служебные символы в строках. То же самое относится к json.
    Ответ написан