PigData, честно говоря, не очень понятно, зачем реализовывать индивидуальное взаимодействие в группе.
Для группы я бы наверное сделал inline-кнопки и попробовал понять как использовать webapp в Телеграме (всё руки не доходят посмотреть что это такое и как работает). Всё же другим пользователям тоже может быть интересно посмотреть ту же инфу, а использование inline-кнопок позволяет не засорять их строку чата кнопками.
Rust - это язык, на котором очень трудно что-либо написать, если не проникнешься его Особым Духом. Поэтому выбирать его в качестве первого языка вряд ли хороший выбор.
Ботов для Discord пишут практически исключительно или на js (discord.js), или на python (discord.py и его клон disnake), причём именно python лидирует в массовом сегменте. Да, на некоторых других языках писать тоже можно, но это уже означает присоединиться к касте меньшинств с соответствующими проблемами и сложностями такого выбора.
Можно также отметить, что у js есть более типизированное расширение языка TypeScript. В python есть type hinting, который не вызывает реальной (заградительной) проверки типов.
В пользу js так же говорит то, что можно на одном и том же языке писать код и на фронте, и на бэке (node.js). С другой стороны, node.js имеет свои проблемы, в частности, довольно печальная практика безумного количества зависимостей в npm у многих библиотек.
В пользу python - это язык более общего назначения, для него есть очень много библиотек, решающих самые разные задачи. В частности, язык популярен в Data Science, ML, AI, у аналитиков, учёных, админов.
С точки зрения уже имеющегося знакомства с C++ можно обратить внимание на C# и .Net Core. Наверное, он типизированный, как C++, но я в этом не разбираюсь. Там есть библиотека Discord.Net.
Мне непонятна боязнь динамической типизации. Это на самом деле не страшно. От себя я бы рекомендовал python.
Liker_mob, на будущее расскажу немного теории. В большинстве классических терминалов используются так называемые ESC-последовательности (Escape-последовательности), которые могут распознаваться терминалом и не выводиться в чистом виде. ESC-последовательности начинаются на служебный символ ESC с кодом 27 (0x1b). Есть и другие управляющие символы, они нас сейчас не волнуют.
Много интересного по поводу таких кодов написано в man console_codes
В частности, есть конструкция вида ESC[код;код;кодm, которая задаёт цвет символов и фона. Например, 31 - красный цвет, 44 - синий фон, 1 - яркий цвет.
colorama использует именно эти коды для разукрашивания вывода. Но чтобы всё это работало, нужно, чтобы была поддержка таких последовательностей со стороны используемого эмулятора терминала. Скорее всего, встроенный терминал IDLE слишком примитивный и ничего этого не понимает.
Если терминал не поддерживает ESC-последовательности, то он либо игнорирует символ ESC (как и большинство кодов от 0 до 31), либо рисует его корявым символом (в частности, под DOS - символом "стрелочка влево"). Поэтому Fore.RED превращается в [31m - это всё, что осталось от ESC[31m, кодовой последовательности, задающей красный текст (хотя вон на скриншоте я вижу, что ESC никуда не пропал и рисуется прямоугольничком).
Предполагаю, что эти кнопки будут работать только в "классическом" треде группы (тот, куда после этого идут сообшения старых клиентов, а также всякие вступления в группу). Но это надо проверять и уточнять.
В целом zfs работает в Linux довольно хорошо, несмотря на лицензионную несовместимость с ядром и необходимость его подключать через DKMS. В zfs есть и нативные средства для кэширования на SSD, можно отказаться от bcache (и в случае zfs не просто можно, но и нужно). Но придётся собирать массив вручную с нуля и всё на него копировать.
Onigire, ещё один способ выйти из функции - это когда её исполнение доходит до последней строчки функции. Если там не будет сделан return какого-то значения, то функция вернёт None.
Onigire, если условие всегда выполняется, что оно делает в коде? Разумеется, оно выполняется не всегда, цикл завершается и функция доходит до конца, где нет return.
Zura_aps, если есть желание заниматься этой темой, рано или поздно придётся завести себе хоть какой-то хостинг. И это не такие огромные деньги, на пиво с фисташками больше уходит.
ThunderCat, а когда захочется тем же кодом поддерживать узбеков, финнов и каталанцев, то сразу же станет понятно, насколько неудобны рукодельные реализации для решения такиз задач.
Почему chat.id? id пользователя равен id чата только в приватах с ботом - и то я настоятельно рекомендую на это не ориентироваться, потому что chat_id и user_id прям по своей задумке это разные вещи.
EnotShow, чтобы асинхронность ускоряла работу приложения, нужно, чтобы в ней было много ввода вывода и как следствие переключений асинхронных задач. Если там много процессорно-ориентированного кода и не происходит ввода-вывода, то это не поможет. Вообще, надо понимать, что в asyncio всё выполняется в один поток, там нет никакого настоящего параллелизма, и "ускорение" заключается в том, что одни задачи могут выполняться в то время, когда другие ожидают ввода-вывода (по сети, в локальные файлы итд). То есть это хороший механизм, но он предназначен лишь для определённого класса задач.
Если parse_item берёт содержимое страницы и пытается его анализировать, то никакого ввода-вывода в это время не происходит. И если этот процесс упирается в 100% процессора, то даже расставлять внутри asyncio.sleep(0) (который по сути форсирует переключение задач, что иногда помогает) бессмысленно - всё равно в один поток будет работать.
WebforSelf, может и не память. Хотя довольно логичное предположение, что обычно ему нет проблем с памятью, а потом вжух! - и за минуту память вся кончается, процесс умирает, появляется много свободной памяти.
Надо логи читать, возможно там что-нибудь есть о причинах его падения.
Скорее всего на внешнем харде какой-нить exfat, а в проблемном файле например бэкслеш в имени, который там не разрешён. Тут только выяснять, на каком именно файле падает, и его переименовывать.
Вариант - запаковать файлы в архив и его положить на хард. Но распаковка на винде всё равно вызовет проблемы.
Для группы я бы наверное сделал inline-кнопки и попробовал понять как использовать webapp в Телеграме (всё руки не доходят посмотреть что это такое и как работает). Всё же другим пользователям тоже может быть интересно посмотреть ту же инфу, а использование inline-кнопок позволяет не засорять их строку чата кнопками.