LINUX.ORG.RU

Плагин перевода текста каналов/сообщений в hexchat

 , , ,


1

2

Здравствуйте.

Захотел себе перевод в hexchat. Попробовал «штатный» google translate плагин (два питоновских файла, которые надо гексчату в /addons положить) - не взлетел, дополнительных команд не появилось. Другой какой-то попробовал - он компилировался-компилировался, да так и не выкомпилировался.

Реквестую истории успеха, если есть, в гугле результатов - с гулькин нос.

Спасибо за внимание.

★★★★★

Последнее исправление: piyavking (всего исправлений: 2)

Я ничего не знаю про hexchat и его плагины, но раз они есть и туда можно что-то положить, то можно написать плагин с использованием translate-shell например.

Если кинешь в меня документацией попробую запилить, сегодня вечером, хочется отвлечься на что-то. Оно конечно будет через дёргание внешней утилиты, но да не пофигу? =)

Ничего не гарантирую конечно. Может сдуюсь, попытка не пытка


UDP: Вижу dev пакет в репе, там наверное примеры есть, ща попробую, на С и (кажется можно) на Lua сделать.

LINUX-ORG-RU ★★★★★
()
Последнее исправление: LINUX-ORG-RU (всего исправлений: 2)
Ответ на: комментарий от LINUX-ORG-RU

Так плагин завёл, теперь с апи хуков надо разобраться, пока насколько я вижу нельзя просто взять и перехватить сообщение заменив его, но можно после перехвата вывести текст под ним типа

>hello Linux Cool!
#Привет, Linux, круто!

Типа оригинал + перевод, а не просто замена оригинала на перевод.

LINUX-ORG-RU ★★★★★
()
Ответ на: комментарий от piyavking

Тогда надо ещё короткие команды для плагина сделать, типа

  • /TRT aka transmod toggle включить/выключить плагин
  • /TRP aka transmod pairs показывать пару оригинал+перевод
  • /TRS aka transmod single показывать только перевод

И думаю норм буит :)


Опционально может ещё сделать чтобы вводимый тобой текст на русском автоматом переводился на выбранных язык. Удобно то что translate-shell сам распознаёт язык для перевода, тоесть будет автоматом с любого языка на русский, хоть на китайских IRC с иероглифами сиди, но вот перевод твоего текста в какой то, надо будет задавать явно, но чтобы знать что устанавливать надо наверное выводить с какого языка ты переводы читаешь ну и так далее тут циклично всё. Но это программа максимум скорее всего не будет, но оставлю эти мысли в стух.

LINUX-ORG-RU ★★★★★
()

Программа минимум готова hexchat-transmod

Сорцы с картинкой

Готовая soшка

По умолчанию включено отображение языка который автоопределился
По умолчанию включено отображение оригинала + перевод, так как перевод порой косячит
По умолчанию выключена работа в режиме DDC сообщений, для конфиденциальности типа, это же личка

Всё это настраивается командами, список их в README и по команде /TRH если забылось.

Что не сделал

  • Настройки, не сохраняются
  • Твои сообщения не переводятся на язык собеседника, только входящие

Может быть потом, а может это вообще лишнее.

Всё, вроде работает, ну как минимум у меня на Debian Testing, пока :)

LINUX-ORG-RU ★★★★★
()
Последнее исправление: LINUX-ORG-RU (всего исправлений: 1)
Ответ на: комментарий от piyavking

Я тестирую на freenode #whatever-you-want канале, спросил на #debian куда можно спамить, сказали туда можно :D

Не могу найти живой, активный IRC канал, где сообщения бы лились рекой. Дабы глянуть, как оно в динамике то. Так что просто писал сам себе сообщения на разных языках.

LINUX-ORG-RU ★★★★★
()
Ответ на: комментарий от LINUX-ORG-RU

А как в этой translate-shell настроить дефолтный язык перевода?

А то у меня на одном десктопчике взлетела [ru] по умолчанию, а сейчас дома скомпилил-повторил - она работает, но переводит на [en](

Разобрался, export TARGET_LANG=ru

P.S. #archlinux на libera.chat вполне резвенько капает, например. там тестю...

piyavking ★★★★★
() автор топика
Последнее исправление: piyavking (всего исправлений: 2)
Ответ на: комментарий от piyavking

Примеры конфигурации тут

Так-то оно наверное читает переменную окружения ru_RU.UTF-8 и по ней определяет язык перевода, я исходил из того что будет правильно определятся язык системы и что желание переводить на него будет желанием пользователя (тебя). Но так-то, да цепочка эта может не сработать в любом месте.

Дабы не залезать в конфигурацию translate-shell которая может расходится с тем что ты хочешь видеть в системе и тем что ты хочешь видеть в плагине. Можно добавить ключ/чи которым можно установить параметры перевода, ну и в таком случае сохранение настроек надо сделать чтобы не вбивать всё каждый раз. Ну просто желаемый язык перевода может отличаться от языка системы. Ща чёнить придумаю, просто это удобно надо сделать, если давать возможность выбора языков, значит в справке надо выводить варианты доступных языков, ну типа это будет логично, чтобы всё что надо вот оно перед глазами, ну типа.

LINUX-ORG-RU ★★★★★
()
Ответ на: комментарий от LINUX-ORG-RU

Уж нашёл-отрехтовал.

Эттта...

Чтоб так уметь петон надо курить много, да?

Я просто подумал про перевод всплывающих мессаг, но ты и так огонь штуку изготовил на ровном месте практически, чтоб и эту фишку впиливать!)

Но, кстати, если впилишь, то можно и на гитхабчик изделие выложить будет, ящт...

piyavking ★★★★★
() автор топика
Ответ на: комментарий от piyavking

Уж нашёл-отрехтовал.

Ну, это да, ты задал переменную окружения, но я всё же добавлю возможность явно задать параметры перевода.

Чтоб так уметь петон надо курить много, да?

Оно на Си, а translate-shell вообще на awk написан, я его просто как внешнюю утилиту дёргаю и всё.

Я просто подумал про перевод всплывающих мессаг

Так они и так работают, выделил текст, горячую клавишу тыкнул, перевод всплыл. Или ты имел в виду чтобы при каждом новом сообщении в чате всплывало на экране? Как в poptrans только для чата, полностью на автомате?

Если так, то это была бы плохая идея, так как нет нормального способа определить сколько такому всплывающему сообщению висеть, а оно висит над всем на экране, нет нормального способа его закрыть, а если сообщения пойдут одно за другим, всё это будет наслаиваться друг на друга. Оно удобно когда ты просто явно выделил где угодно текст, нажал горячую клавишу явно и оно секунд 5 висит и показывает перевод, закрывается, и всё, а если оно будет всплывать автоматически, то херня будет неуправляемая.

Но, кстати, если впилишь

Что именно? Ты может имеешь в виду нечто вроде

  • сделать автоматический всплывающий перевод при наведении мышки на нужное сообщение

Или

  • сделать автоматический всплывающий перевод при выделении сообщения в hexchat

типа того, технически это возможно, но в API hexchat нет для этого инструментов.

  • Или ты вручную выделяешь текст для перевода и вызываешь poptrans скрипт
  • Или плагин hexchat текст перевода просто вставляет в сам чат

Третьего не дано :)

то можно и на гитхабчик изделие выложить будет, ящт…

Так яж не мешаю, лицензия zlib хоть куда выкладывай :D
Мои личные говнокодики лежат на гитфлике, всё внешнее на гитхабе, зеркалирование налаживать лень пока, геморой тот ещё, а смысла особого нет.

LINUX-ORG-RU ★★★★★
()
Ответ на: комментарий от piyavking

Обновление 0.2.0

Добавил возможность выбора языков, язык источник:язык приёма

  • /TRL auto:auto Полностью автоматический режим
  • /TRL : Полностью автоматический режим
  • /TRL en: Пытаться переводить с англиского, а автоматически выбранный
  • /TRL :ru Аавтоматически определить язык и перевести на русский

У hexchat внутренние аргументы команд наркоманские, во первых с пробелами, во вторых eol механизм странный :)

Убрал косяк, при котором в браузере автоматически открывались ссылки которые постят в чат. В начале вывожу все короткие идентификаторы языков для /TRL простыня конечно, но так и должно быть, самодостаточным.

Бинарь + сорцы

Ну наверное и всё. Больше что-то делать в таком плагине нет смысла.

  • Сохранения излишни по моему, оно в дефолте в 99% случаев будет просто работать как надо.
  • Автоперевод текста который вводишь ты, на другой язык, вроде прикольно, но оно иногда такую дурь выдаёт…

Единственные минусы, которые по началу необходимы, это

  • Простыня текста при включении плагина (но так правильно, ну и всего 1 раз на запуск)
  • Спустя время метки входящего языка [en] - autodetect [en] - selected

Гарантированно будут надоедать и мешать, но включать их по умолчанию правильно, надоедят выключи дёрнув /TRI

LINUX-ORG-RU ★★★★★
()
Ответ на: комментарий от LINUX-ORG-RU

Она и всплывающие переводит, только галку в настройках у гексчата снять. Обалденнейшую ты турындыку сварганил, что и говорить! Юзаю, всё устраивает)

piyavking ★★★★★
() автор топика
Последнее исправление: piyavking (всего исправлений: 1)
Ответ на: комментарий от piyavking

Видимо мы о чем то «всплывающем» разном говорили, про что всплывающее ты имел в виду?

Как это увидеть и где для этого галку снять?

UDP: Аааа, всё понял, ты имел в виду ленту сообщений в области уведомлений.

Надо в документацию скрин засунуть о том как включать перевод сообщений для уведомлений, вдруг кому тоже надо будет

LINUX-ORG-RU ★★★★★
()
Последнее исправление: LINUX-ORG-RU (всего исправлений: 4)
Ответ на: комментарий от piyavking

Ну…

  • Ник того кто пишет сразу есть
  • Информацию о канале можно отдельно получить

Но, так если думать дальше, по умолчанию должно переводится всё, отовсюду, от всех.

Таким образом получается надо типа

  • Выключить для всех каналов
    • А далее выборочно включить
  • Включить для всех каналов
    • А далее выборочно выключить
  • Выключить для всех ников
    • А далее выборочно включить
  • Включить для всех ников
    • А далее выборочно выключить

Только так можно будет реализовать желания типа

  • Всё вырубить, а вот тут и для вот этого включить
  • Пусть всё везде работает, но вот там и для вот этого выключить.

Подумаю, может попробую сделать.

LINUX-ORG-RU ★★★★★
()
Ответ на: комментарий от piyavking

Обновление 0.3.0

  • Добавил сохранения, всё что ты меняешь сохраняется.
  • Перенёс простыню с короткими именами языков в отдельную команду /TR-LIST
  • Дополнительная команда /TR-RESET для сброса всех настроек плагина на значения по умолчанию

Бинарь + сорцы


Про фильтрацию пока ещё думаю. В голове монструозно получается, белые списки, чёрные списки, и по логике будет что-то типа

если (канал_не_в_чёрном_списке или канал_в_белом_списке)
{
     если (пользователь_не_в_чёрном_списке или пользователь_в_белом_списке)
     {
           вывести(пользователь,перевести(сообщение))
     }
}

Тут получается нужно ну 8 дополнительных команд.

  • TR-IGNORE-CHANNEL all | channel_name
  • TR-HANDLE-CHANNEL all | channel_name
  • TR-IGNORE-USER all | user_name
  • TR-HANDLE-USER all | user_name
  • TR-RESET-CHANNEL-IGNORE-LIST
  • TR-RESET-CHANNEL-HANDLE-LIST
  • TR-RESET-USER-IGNORE-LIST
  • TR-RESET-USER-HANDLE-LIST

Ну типа, делать

  • белые списки, выключать сначала всё, потом включать только нужное
  • чёрные списки, включить всё, но отключить некотрое
  • Всё это делится на два, фильтр канала, фильтр пользовавателя
  • Нужно иметь возможность сброса, по отдельности белого/чёрного списка и в каждом для канала и пользователя

Это всё прикольно, но реально выглядит монструозно, запутаешься. Как по мне достаточно просто через /TRT вкл/выкл по мере надобности. Базу, я фильтрации я подготовил. Но вот интерфейс взаимодействия с ней (полноценный) получается чёт не очень. Оно бы хорошо если бы просто была контекстная менюшка, тыкнул на канал и например выключил/включил для него, и у названия бы галочка была, так же с никами пользователей. Вот тогда было бы удобно и сразу всё видно, а так получается 100500 ключей

Есть вариант упросить, типа будет просто например

  • TR-IGNORE без аргументов блокирует работу в текущем канале
  • TR-IGNORE user с аргументом, блокирует работу для ника в любом канале
  • TR-IGNORE-RESET просто сбрасывает все настройки игнорирования

Но это не позволит делать белые списки… Или ещё 3 ключа добавлять, не 8 будет а 6. Я хз.

LINUX-ORG-RU ★★★★★
()
Ответ на: комментарий от LINUX-ORG-RU

Есть ещё одно соображение: при хорошем количестве подписок плагин, обрабатывая каждый канал, примораживает гексчат, вплоть до принудительного перезапуска (на 100 подписочках гексчат парализует).

Так что наилучший рабочий вариант - по умолчанию плагин задизейблен и выключен на всех источниках, юзер где захочет, там его и включит. Иначе политика «всё включено» просто не даст гексчату работать.

Это, конечно, если у тебя остался ещё энтузиазм) Но без этой фишки это будет не пепелац, а лодочка, полезная только на малых площадях)

piyavking ★★★★★
() автор топика
Ответ на: комментарий от piyavking

при хорошем количестве подписок плагин, обрабатывая каждый канал,примораживает гексчат

А это потому что асинхронно сделать нельзя, я форкаю trans процесс, и вынужден его ждать, чтобы напечатать перевод. А получить сообщение, повесить каллбек на перевод, сращу вывести оригинальный, а уже как переведётся выше или ниже, напечатать перевод нельзя. Вернее можно, если не ждать, но тогда перевод будет написан просто в случайном месте, что само по себе бред.

Иначе говоря, асинхронной вставки текста в нужную область чата нету. Так что конкретно с этим делом что-то сделать на уровне плагина, невозможно :/


Так что наилучший рабочий вариант - по умолчанию плагин задизейблен и выключен на всех источниках

Нет, я не согласен, вернее не полностью согласен, это не лучший вариант, это лучший вариант для случая когда у тебя 100 чатов. Но худший когда у тебя пару чатов.

Я понимаю что ты мой единственный пользователь, но =))))))))))))

Иначе политика «всё включено» просто не даст гексчату работать.

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


Есть ещё вариант промежуточный, режим при котором переводится только тот канал который у тебя сейчас текущий, активный. Я не уверен что так можно, но так удобно по идее, переводится только то что ты видишь, а в каналы в которые летят сообщения в фоне игнорируются.

И если вот такое получится (последнее) то можно его сделать по умолчанию, такое подойдёт и для тех кто открыл 1 чатик и у него всё просто сразу работает и для тех у кого 100 чатов открыто сходу всё тоже просто сразу работает, но можно включить перевод и других каналов по желанию.

Типа такого.

Сейчас готов код которым можно будет сохранять состояния списков фильтрации в hexchat и обратно, может даже сегодня будет готово.


Ну и да, так как ты сам собираешь, я просто добавлю для make возможность установить дефолтное поведение (на которое можно сбрасывать) на этапе сборки ключами для make, и все довольны =)

LINUX-ORG-RU ★★★★★
()
Ответ на: комментарий от piyavking

Не, сёдня не будет, чёт я поторопился =)
На днях, надеюсь. Ща надо кашу сготовить и поесть, а завтра огород копать.
Огородный сезон в самом разгаре, за травушкой муравушкой ухода много надо, буду зимой кушать, и не cдохну :).

LINUX-ORG-RU ★★★★★
()
Последнее исправление: LINUX-ORG-RU (всего исправлений: 2)
Ответ на: комментарий от piyavking

Ааххаха, я вчера написал в Libera.Chat в канал #hexchat мол я вот для человека написал плагин переводчик, может кому тоже надо нате, там человек кекнул с того что ридми не на английском и репа на gitflic, но да ладно, ещё пообсуждали по поводу переезда hexchat на gtk3/4/qt/sdl2/sdl3 так как у некоторых мол оно уже просто не работает, щас захожу проверить работу режима перевода только текущего активного чата, а мне

 Closing Link: ***.***.***.*** (*** Banned )
* Соединение разорвано (Удаленная машина закрыла сокет)
 Переключаемся к следующему серверу Libera.Chat...
* Соединение разорвано ()
* Looking up irc.libera.chat
* Соединение с irc.libera.chat (108.181.132.149:6697)
* Ошибка соединения ((**********) error:0A000419:SSL routines::tlsv1 alert access denied)

Забанили по IP, вероятно просто по причине того что РФ.
Во утырки! :D Кто-то видимо нажаловался.
Хотя может я ошибаюсь, и такое в IRC норма, а просто зря бубню, но очень на это похоже.
При этом я никуда на либре не спамил, для тест спама вообще другой сервер, с пустым каналом.


Но да пофиг. Режим работы с переводом только активного чата готовый, для этого команда /TRO в режиме переключателя, по умолчанию включено, то-есть, оно переключает режим, переводить только то что в выбранном чате, или пререводить всё.

Ща ещё протестирую маленько, и релизну. А фильтры уже потом, на днях, как получится.

LINUX-ORG-RU ★★★★★
()
Ответ на: комментарий от piyavking

Обновление 0.4.0

Новый режим по умолчанию, как и обсуждали

  • /TRO - Translate One Tab в режиме переключателя, переводить только активный чат (по умолчанию вкл)

Бинарь + сорцы


Как минимум теперь да, ты прав можно будет держать 100+ чатов и не вешать намертво интерфейс


Update: Я немного ступил, я проверяю только имя чата, так что если у тебя два сервера например Libre.Chat и freenode и на обоих например есть канал #debian и ты сейчас на канале #debian и сервере #freenode другой канал #debian тот что на Libre.Chat тоже будет переводиться. Надо проверять ещё и имя сервера…

Но это на потом, либо в 0.5.0 войдёт или попозже хотфикс сделаю в виде 0.4.1

LINUX-ORG-RU ★★★★★
()
Последнее исправление: LINUX-ORG-RU (всего исправлений: 2)
Ответ на: комментарий от piyavking

К слову по поводу бана, заметил только что

You are banned from this server- Your irc client seems broken and is flooding lots of channels. Banned for 240 min, if in error, please contact bans@libera.chat.

Типа если я зашёл на много каналов сразу, то в бан. Я видимо погорячился ругая их, и был не прав. Но это я к чему, а к тому что

на 100 подписочках

Как бы это, тебя тоже не прихлопнуло. Возможно это из за того что я (так как ленивый) автоматически закрываю и открываю hexchat и по 20 раз в час автоматически захожу и выхожу с десятка каналов и часто запрашиваю списки каналов.

Хоть это и временный бан, но всё же, видимо часто открывать и закрывать (тут я имею в виду не сворачивание, а закрытие программы) делать не надо.

LINUX-ORG-RU ★★★★★
()
Ответ на: комментарий от LINUX-ORG-RU

Обновление 0.4.1

Теперь для режима /TRO два чата с одинаковым именем различаются, если они на разных серверах, всё должно работать правильно.

Бинарь + сорцы


Но в теории может случится так что не будет или имени сервера или имени чата, ну вдруг, в таком случае сообщение будет отправлено на перевод в обход режима /TRO, так как тем самым чатом у которого нет имени сервера или имени канала может стать текущий активный чат, в ином случае я ругаюсь в stderr об этом казусе.
Но это так, к слову, исключительная ситуация которой как бы быть в норме не должно, ну а если случилась, ну и хрен с ней.

LINUX-ORG-RU ★★★★★
()
Последнее исправление: LINUX-ORG-RU (всего исправлений: 2)
Ответ на: комментарий от LINUX-ORG-RU

Меня бывает и за час порядочно раз элементарно вышвыривает из сетки и потом автозашвыривает обратно. Не, это кто-то бдительный разглядел российского шпиона, навязывающего добрым людям кейлоггер, так вижу...

piyavking ★★★★★
() автор топика
Последнее исправление: piyavking (всего исправлений: 1)
Ответ на: комментарий от piyavking

Разбанило автоматом, всё же это просто бездушная автоматика. Зря я ругался, и выдумывал небылицы. Каюсь. Но по началу сообщения о том что бан выдан на время и причины бана в чате либры небыло, просто бан, а уже при следующих переоткрытиях хексчата стало ещё писать и уведомление мол слишком часто ник на множестве каналов появляется и исчезает. Там же при этом глобально всем отсылается

челик вышел
челик зашёл
челик вышел
челик зашёл

Это вот и есть спам, общими системными уведомлениями Так что причина временного бана вполне себе адекватная, яб тоже так сделал =). Так что извиняюсь что обозвал «утырками» =))))))))
Хотя я получается обозвал программу, так что ничего страшного.

LINUX-ORG-RU ★★★★★
()
Ответ на: комментарий от piyavking

есть в API возможность энейблить/дизейблить плагин для конкретного окна (канала/юзера)?

А как бы выглядело твоё взаимодействие с включением/отключением обработки сообщений каналов целиком или/и пользователей? Выдумай команды для этого, и ситуации если хочешь, и просто вообрази как бы ты этими командами пользовался, как будто оно уже есть, не ограничивай полёт фантазии, или ограничивай, не важно.

У меня есть варианты, но я их не будут все озвучивать намеренно, их много и у каждого свои плюсы и минусы. Поставим просто мысленный эксперимент. Из твоего выдуманного взаимодействия с фильтрацией я пойму ход твоих мыслей на уровне подкорки :) И при реализации постараюсь хотя бы не сильно перечить им.

LINUX-ORG-RU ★★★★★
()
Ответ на: комментарий от LINUX-ORG-RU

как бы выглядело твоё взаимодействие с включением/отключением обработки сообщений каналов целиком или/и пользователей?

Команды я б ровно твои и оставил. Я бы слегка подправил их функционал:

Сейчас «перевод в фокусе» работает только для того окна/вкладки гексчата, которое в фокусе - при смене фокуса перевод прекращается. Хотелось бы, чтобы при отбитии команды «переводить текущее окно» плагин запоминал бы «состояние» находящегося в окне канала или юзера, и переводил бы его вне зависимости, в фокусе оно в дальнейшем или нет. Понимаешь, куда я клоню?

piyavking ★★★★★
() автор топика
Последнее исправление: piyavking (всего исправлений: 1)
Ответ на: комментарий от piyavking

Короче пока придумал так

  • TRW ака Transmod write list (или TRWL или TRFW типа Filter)

Будучи вызванным без параметров в чате добавляет этот чат в белый список, и удаляет из чёрного списка, если тот там был, и такой чат будет всегда переводится

  • TRB aka Transmod black list (или TRBL или TRFB типа Filter)

Будучи вызванным без параметров в чате, добавляет этот чат в чёрный список, и удаляет из белоги списка, если тот там был, и такой чат перестанет переводится

Посмотреть текущие фильтры можно будет например вот так

  • TRFL aka Transmod Filters List

Сбросить фильтры все

  • TRFD aka Transmod Filters Drop

Это для быстрого включения/выключения обработки чатов, чтобы не вводить их названия. При этом можно передавать для TRW и TRB что-то конкретное типа

  • TRW @username всегда переводить сообщения этого пользователя в любом чате
  • TRW #channelname всегда переводить все сообщения в этом чате
  • TRB @username всегда игнорировать этого пользователя в любом чате
  • TRB #channelname всегда игнорировать этот чат

При этом можно например отключить перевод чата целиком и включить обработку в этом чате перевод только для пары юзеров

/TRB
/TRW @user1
/TRW @user2

Или наоборот включить обработку чата целиком и игнорить пару юзеров

/TRW
/TRB @user1
/TRB @user2

Но есть нюанс, когда вбивается ник пользователя, на двух и более серверах могут быть челики с одинаковыми никами в если нужно блокировать например конкретный ник, который на конкретном серваке, то придётся писать вот так

/TRB @librechat:username

Та же самая ситуация с каналами

/TRB #librechat:channelname

Такой длинный формат записи нужен если ты фильтруешь чат А на сервере Б из чата Г на сервере Д :D

Если ты блокируешь в котром сейчас находишься и/или пользователя который в текущем активном чате, то имена чатов и серверов можно будет опускать, так как из можно будет получить автоматически из контекста того где ты находишься

Реализовать всё это можно, и не особо будет сложно, но вот будет ли удобно пользоваться этим едрить-колотить, не знаю.


Как упросить, можно например запретить блокировать канал не находясь в нём, тоесть убрать передачу имени канала, если хочешь его блокнуть, зайди в его чат и блокни вызывав в чате канала /TRB или заблокировав там конкретного юзера /TRB username ну или наборот вызвать /TRW для включения канала и /TRW для включения пользователя.

Типа управлять фильтрацией канала или пользователя на канале, можно только находясь в этом канале. Так всё упрощается всего до двух команд /TRW и /TRB без всей сложной логики, ну а вспомогательные, показать фильтры, сбросить фильтры, это терпимо.

Это значительно проще в использовании, интуитивно, просто. Но, ты сказал что у тебя 100+ каналов, если ты захочешь включить 10 из них то тебе придётся в 10 зайти и 10 раз вбить /TRW что тоже не очень.

Короче я хз, одно дело сделать, другое дело сделать удобно. Но сделать удобно для любого случая нельзя слишком дохера переменных, в виде, есть пользователь, а на каком он канале, а на каком он сервере, а пользователь с таким же ником на другом канале этого же сервера, а пользователь на другом сервере с таким же каналом и таким же ником.

Были бы просто каналы и просто ники и всё, былобы на порядок проще, а тут учитывать надо всё, а если учитывать не всё, то будет иногда работать странно, например сервер А там челик который пишет интересное ты кидаешь его в белый спискок, интересно почитать, а на другом серваке челик с таким же ником спамит тупняка мегатонны, просто по нику их не различить и для включения фильтра для конкретно него придётся вбирать /TRB @libra.chat:user, а если замутить просто канал где он это /TRB #libra.chat:chanel для случая если будет необязательно явно переключаться на этот сервер и чат для включения фильтра.

Ох ты ё, короче. :D

LINUX-ORG-RU ★★★★★
()
Ответ на: комментарий от piyavking

Понимаешь, куда я клоню?

Это-то понятно, для этого я придумал белые и чёрные списки, вбиваешь в текущем канале /TRW и всё, канал в белом списке, а это значит он всегда будет переводится, вбиваешь /TRB и он в чёрном списке.

Но это одна из возможных фильтраций, если ты запомнил канал, надо тогда ещё иметь возможность вернуть его в общий режим, например.

Иначе ты запомнишь 50 каналов вот так, а обратно как. Тут надо делать полноценно, белые списки / чёрные списки / общий режим

Вот я и не тороплюсь делать то. Думаю как бы удобнее сделать, ну и чтобы не сложно было, и чтобы поддерживать не надо было, чтобы оно просто работало годами без моего участия, поэтому стараюсь аккуратно делать без размаху.


Можно ещё как вариант просто сохранять автоматом в белый список чаты в которые ты выбрал в GUI например открыл hexchat у тебя 100 каналов подгрузились, кликнул вошёл в один, второй третий и они теперь переводятся автоматом, а те которые ты явно не кликнул игнорятся…

Удобно, но надо тогда иметь возможность сбрасывать такой автосписок, а это ещё одна команда…

А режим по уполчанию в котором переводится только то что пришло в активном чате, ну с этим придётся мирится.

Думать надо… для одного случая сделаешь хорошо, будет ужасно для другого.

LINUX-ORG-RU ★★★★★
()
Последнее исправление: LINUX-ORG-RU (всего исправлений: 3)
Ответ на: комментарий от piyavking

Короче, пока буду делать вот так

  • Первое, фильтра пользователей не будет, фильтр только по каналам (чтобы не усложнять)
  • Второе, фильтр каналу можно задать только находясь на канале (чтобы руками не прописывать имена сервера, канала)

Команды фильтрации

  • /TRFW Translate Filter White List запомнить что этот канал переводить всегда
  • /TRFB Translate Filter Black List запомнить что этот канал не переводить никогда
  • /TRFA Translate Filter Auto Mode убрать канал из black/white списков в автоматический режим /TRO Translate active tab

Вспомогательные команды

  • /TRFL показать белые и чёрные списки
  • /TRFD сбросить белые и чёрные списки
  • /TRFWD сбросить белые списки
  • /TRFBD сбросить чёрные спсики

В твоём случае, получается всё как ты хотел ранее, по умолчанию всё выключено, но текущий чат переводиьтся, если вбить /TRFW то пеперь пори переходе на другой канал этот будет переводится и так далее, если добавил слишком много накалов то можешь сбросить все белые фильтры /TRFWD или зайти на каналы которые больше не нужны и вбить там /TRFA переведя их в автоматический режим.

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


Плюсом будет то что текущий подход позволит потом, если реально будет нужно всё же добавить возможность явного указания и пользователя и канала и сервера, при этом сохранится старое поведение. Где команды вызываются просто без параметров.


Пойдёт или херня? :D

LINUX-ORG-RU ★★★★★
()
Последнее исправление: LINUX-ORG-RU (всего исправлений: 1)
Ответ на: комментарий от piyavking

Обновление 0.5.0

Пикча

Добавлена возможность фильтрации каналов по белым спискам и чёрным спискам
При добавлении в белый список, автоматически удаляется из чёрного и наоборот

  • /TRFW добавляет канал в белый список, всегда переводится

  • /TRFB добавляет канал в чёрный список никогда не переводится

  • /TRFD удаляет канал из списков фильтрации, теперь канал переводится только если он активный

  • /TRF-LIST отображает списки фильтрации

  • /TRF-RESET-ALL сбрасывает все списки фильтрации

  • /TRF-RESET-WHITELIST сбрасывает только белый список фильтрации

  • /TRF-RESET-BLACKKIST сбрасывает только чёрный список фильтрации

  • Теперь команда /TRH выводит и справку, и текущее состояние настроек.

  • Исправлены ошибки неправильного наименования DDC -> DCC

  • Добавлена возможность вывода графических кнопок для команд

    • /TR-BUTTONS-ADD
    • /TR-BUTTONS-DEL

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

  • Добавлена возможность установки параметров по умолчанию на этапе сборки
ONSTART_ENABLE=1   # плагин включён, по умолчанию (1)  
ONE_TAB_ENABLE=1   # плагин переводит только активный чат, по умолчанию (1)  
SHOW_PAIRS_MSG=1   # плагин отображает перевод и оригинал, по умолчанию (1)  
SHOW_LANG_NAME=1   # плагин отображает название языка оригинала, по умолчанию (1)  
DCC_MSG_ENABLE=0   # плагин переводит личные DCC, по умолчанию (0)  
TRANSLATE_RULE=":" # плагин по умолчанию сам определяет язык оригинала и системы  

И ещё что-то там исправлено и так далее, по мелочи.

Сорцы и бинарь


Ну, думаю на этом всё. Надеюсь всё будет работать правильно, отныне и во веки веков и не потребуются правки, исправления и так далее. Сейчас там много аллокаций, старался сделать так чтобы если например не удалось выделить память под списки фильтрации, то плагин не упадёт, а просто будет их игнорировать, типа стараюсь не уронить основное приложение даже при фатальных ошибках, в том числе когда получаю NULL в именах сервера/чата. Буду рад что багов нет, и 0.5.0 не потребует больше никогда исправлений, доработок :)


Всё мне в целом уже наскучило. Чёнить другое теперь буду делать.

LINUX-ORG-RU ★★★★★
()
Ответ на: комментарий от LINUX-ORG-RU

Результат - огонь. Сейчас сил нет, завтра потестю.

в целом уже наскучило. Чёнить другое теперь буду делать.

Ещё бы не наскучило, ты реально крупно заморочился. Спасибо ещё раз!

piyavking ★★★★★
() автор топика
Ответ на: комментарий от piyavking

И да, к слову, чтобы улучшить отзывчивость лучше выполнить /RTI выключив отображение названия языка оригинала, или изначально собрать make SHOW_LANG_NAME=0, тут как удобнее, просто получение информации о языке это доп вызов fork с запуском translate-shell процесса, короче инфа о языке не столь важная информация, а подтупливать будет ровно в 2 раза сильнее с ней. Ну, это так, на последок.

Ну и да ещё, как я предполагал, иногда hexchat иногда просто не выдаёт пару «имя сервера», «имя канала», тем самым становится невозможна работа логики фильтрации или логики режима перевода только текущего, активного чата, и так как такая ситуация может случится именно прям в текущем активном чате, то с просто пропускаю такие сообщения на перевод в обход всех фильтров.

Благо, такого не много, на старте обычно, когда чаты подгружаются, туда летят сообщения, плагин их уже ловит, а вот hexchat ещё на запросы откуда сообщения пришли не отвечает, вернее отвечает NULL указателем на строку :) Но это так, чтобы не развилась параннойя от того что например ты всё заблокировал, а оно взяло ни с того не с сего в случайном чате пару сообщений перевело, ты можешь подумать что настроил что-то не так, но нет, оно само. В этой ситуации я и уведомлений в чат не пишу, только в stderr, ситуаций таких мало и они единичные.

LINUX-ORG-RU ★★★★★
()
Ответ на: комментарий от LINUX-ORG-RU

Раздавлен мощью твоего кунфу. А-хре-неть ты профи, ваше величество. Серьёзно, сижу и шарами хлопаю. Реально вообще тебе спасибо, взял с нуля такую залипульку поднял за две недели. Уверен, кстати, что здравым людям она тоже обалденно зайдёт, при каждом удобном случае от всей души порекомендую)

Апдейт. Да ты ещё и кнопочки впилил! Ну ты маниааак)))

Без всяких ироний, продукт ты слепил великолепный, благодарчик, благодарчик, и ещё раз благодарчик!

piyavking ★★★★★
() автор топика
Последнее исправление: piyavking (всего исправлений: 1)
Ответ на: комментарий от LINUX-ORG-RU

только всего один просто маленький вопросец, сразу пишу - плагин затвердевшая достойная вещь, всё ок, никаких правок, только в tranlate-shell вижу странненькое: когда trans'у скармливаешь текст, в котором есть линк, то он этот линк не оборачивает в гугль-транслейт, а перекорябливает:

hata@piyavking:~ $ trans 'Protest Offering Equal Rights to Women https://www.thegatewaypundit.com/2025/05/thousands-muslim-men-rally-bangladesh-protest-offering-equal/'
Protest Offering Equal Rights to Women https://www.thegatewaypundit.com/2025/05/thousands-muslim-men-rally-bangladesh-protest-offering-equal/
 
Протест, предлагающий равные права женщинам https://www.thegatewaypundit.com/2025/05/thousles-muslim-men-rally-bangladesh-protest-fering-eaval/

Да это даже и не вопрос, просто, чтоб ты тоже знал на всякий случай, что шелл може и так вот подглюковывать)

piyavking ★★★★★
() автор топика
Ответ на: комментарий от piyavking

Изначально он оборачивал ссылку, да, но попутно ещё открывал автоматически эту ссылку в браузере, я даже сначала не понял и не заметил, и удивился когда глянул что у меня в браузере 10 вкладок гуглтранслейта открыто.

Так что я захардкорил -no-browser

Оно перестало ссылки автооткрывать, ну и я успокоился и более на ссылки внимания не обращал, но да, их коробит. Сейчас man посмотрел там есть -no-autocorrect, но, нет ссылка всё равно сломанная получается. :(

Из решений просто сходу мысли

  • Как временное решение
    • Использовать режим /TRP чтобы видеть оригинальную, не сломанную ссылку там.
  • Решение которое хрен знает сколько ждать
    • Написать багрепорт в translate-shell чтобы он не обрабатывал ссылки вообще если ему сказали -no-browser
      • видимо при отключении работы с ссылками через браузер, оно просто пускает всё как текст на перевод
  • Вкоряжить на своей стороне что-то, например, детектить ссылки, вырезать их из сообщения и вставлять на их место например числовой идентификатор типа 16841684964189479684798749634169874693485198 или uuid, но это линяя зависимость, я не хочу отвала сборки плагина в любой момент, который не с чем не совпадёт, в теории, затем отправить сообщение на перевод, возврат снова обработать и вставить вместо числа оригинальную ссылку, ну и отобразить.
  • translate-shell под капотом имеет разные движки
trans -S
  apertium
  aspell
* auto
  bing
  google
  hunspell
  spell
  yandex

Сейчас оно просто пробует разные и если получилось, то выдаёт результат. Для справки, так-то API переводов всех этих сервисов платные, они лишь разрешают анонимные запросы, от случайных челиков, без регистрации и смс. Но если часто будешь пользовать просто тебя на пару часиков забанят по IP поэтому тут целая кучка переводчиков, даже если один из них ссылки не ломает, выбирать что-то одно плохая идея, с твоей стороны льётся целая кучка запросов, и перевод просто сломается надо будет вручную выбирать другое и пошло поехало. Технически это решение, просто выбери другой движок перевода, практически, может проработать 10 лет, а может от частых запросов через 5 минут отвалится.


Буду думать. Я обязан оставить простор конфигурации translate-shell на стороне пользователя, ну чтобы кому надо настраивал translate-shell в его конфигах как захочется, а вшиваю лишь то что базово необходимо плагину, тихий режим, не дёргать браузер и всё. Наверное стоит использовать какойнить хак, в виде обрамления ссылки во что-то что означает для переводчиков НЕ ТРОГАТЬ ЭТО, но это такое себе, ненадёжно в целом. Или просто вырезать, а потом вставлять после перевода на своё место. Надёжно, только вот так (UDP: хотя и это ненадёжно, переводчик может просто сожрать/изменить любой идентификатор метки обратной вставки ссылки). Так наверное и надо сделать. Надо думать.

LINUX-ORG-RU ★★★★★
()
Последнее исправление: LINUX-ORG-RU (всего исправлений: 4)
Ответ на: комментарий от LINUX-ORG-RU

UDPснова

Хотя эта ситуация проблемна и для самого translate-shell, он или просто выделяет ссылку оборачивая её, или должен делать как я, вырезать её, вставлять идентификатор подстановки, а при возврате менять его на оригинальную ссылку, так как я на 246% уверен что они знают про ломанные ссылки, а также они знают что можно лишь пометить место куда её вертать, не поломанную, но также они знают что метку может сожрать и вставлять будет просто некуда.

Так что то скорее всего общая глобальная проблема того что ты отправляешь текст в мясорубку, тебе выдаётся фарш иного вида, и там может быть что угодно, у тебя нет контроля над тем что происходит на стороне переводчика самого.

Так что тут абсолютно любой подход будет костыльным, лишь в разной степени терпимости и подходящести под ту или иную ситуацию :D

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

Мелочь вроде какая, а столько подтекста :D


пишу размашисто чтобы просто конспектировать мысли и заметки по всему этому, чтобы в голове не держать, если что.

LINUX-ORG-RU ★★★★★
()
Ответ на: комментарий от LINUX-ORG-RU

Да, /TRP , и не париться особо. А ещё вдруг это только один движок из набора «apertium, aspell и т.д» гадит (ссылки-то ломаются не всегда, вот в чём штука), и тогда возможно вычислить его и в конфиге прибить. Это был бы самый шикарный вариант. Но всё это, естественно, несколько погодя и исключительно под настроение, конечно)

И я еще с этой стороны в транслейт-шелле покопаюсь, вдруг чего и откопаю)

piyavking ★★★★★
() автор топика
Последнее исправление: piyavking (всего исправлений: 1)
Ответ на: комментарий от piyavking

ссылки-то ломаютя не всегда, вот в чём штука

Ну вот оно берёт все движки и по очереди пытается ими перевести, с кем получилось, то и выдаст. Вот и.

и тогда возможно вычислить его и в конфиге прибить

Нутк

trans -S
  apertium
  aspell
* auto
  bing
  google
  hunspell
  spell
  yandex
  • asperum - провал (тупо не работает)
trans -no-browser -b -e apertium 'Protest Offering Equal Rights to Women https://www.thegatewaypundit.com/2025/05/thousands-muslim-men-rally-bangladesh-protest-offering-equal/'
[ERROR] Apertium returned an error response. HTTP status code: 400
[ERROR] Other HTTP error
  • aspell провал (оно тупо ничего не перевело, а просто вставило Equal[А|И|О] Rights to[а|и|к])
trans -no-browser -b -e aspell 'Protest Offering Equal Rights to Women https://www.thegatewaypundit.com/2025/05/thousands-muslim-men-rally-bangladesh-protest-offering-equal/'
Protest Offering Equal[А|И|О] Rights to[а|и|к] Women https://www.thegatewaypundit.com/2025/05/thousands-muslim-men-rally-bangladesh-protest-offering-equal/
  • bing успех
trans -no-browser -b -e bing 'Protest Offering Equal Rights to Women https://www.thegatewaypundit.com/2025/05/thousands-muslim-men-rally-bangladesh-protest-offering-equal/'
Протест против равных прав для женщин https://www.thegatewaypundit.com/2025/05/thousands-muslim-men-rally-bangladesh-protest-offering-equal/
  • google провал (вот он то походу и косячит)
trans -no-browser -b -e google 'Protest Offering Equal Rights to Women https://www.thegatewaypundit.com/2025/05/thousands-muslim-men-rally-bangladesh-protest-offering-equal/'
Протест, предлагающий равные права женщинам https://www.thegatewaypundit.com/2025/05/thousles-muslim-men-rally-bangladesh-protest-fering-eaval/
  • hunspell провал (его нету :D)
trans -no-browser -b -e hunspell 'Protest Offering Equal Rights to Women https://www.thegatewaypundit.com/2025/05/thousands-muslim-men-rally-bangladesh-protest-offering-equal/'
[ERROR] Spell checker (hunspell) not found.
  • yandex провал (тупо не работает)
trans -no-browser -b -e yandex 'Protest Offering Equal Rights to Women https://www.thegatewaypundit.com/2025/05/thousands-muslim-men-rally-bangladesh-protest-offering-equal/'
[ERROR] Yandex returned an error response. HTTP status code: 403
[ERROR] Other HTTP error
[ERROR] Session is invalid

Итого у тебя на выбор только

  • google - который портит ссылки
  • bing - который не портит ссылки

А всё остальное просто не работает. Не густо

Ну, добавь желаемое в конфиг translate-shell и всё.

Но так как осталось всего 2 работающих сервиса, лучше просто ничего не трогать. И мирится с косяками гугла :) и не убирать его из движков, а то вдруг bing отвалится, тогда вообще ничего работать не будет

LINUX-ORG-RU ★★★★★
()
Последнее исправление: LINUX-ORG-RU (всего исправлений: 2)