LINUX.ORG.RU

Как Grok меня с Hexchat- ом подружил или now-playing, написанный ИИ

 


0

1

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

Не уверен, что данная тема подходит именно в этот раздел, но пусть если не подходит её модераторы переместят в правильную. Благодарю за терпение и труд модерации заранее!

Недавно, во время обсуждений на моём IRC канале один из пользователей вспомнил как раньше в программе mIRC был плагин, позволяющий отправлять сведения о прослушиваемой песни. Тогда я решил поискать плагины под мой на тот момент любимый клиент, чьё название KVirc, но не нашёл, зато под Hexchat нашёл такой, который отображает композицию с плеера mpv. Но потом мне захотелось не зависеть от одного плеера при отображении и вспомнил про один из своих любимых виджетов conky , который называется now-clocking. Он через playerctl брал имена композиций даже с kdeconnect-а, что меня сильно устраивало. В поисковике подобный плагин в готовом виде, который бы работал именно с playerctl не было, поэтому попросил нейронку мне написать такое. В качестве ИИ для вайбкодинга такого проекта я применил Grok от товарища Маска… и она написала то, что после всего ещё одной доработки стало моим итоговым вариантом. Чтобы и вы не искали, а опубликую здесь код данного произведения.

# HexChat Python Plugin: Now Playing as Action (/me)
# Сохрани как nowplaying_action.py в ~/.config/hexchat/addons/
# Загрузи: /py load nowplaying_action.py
# Использование: /np — отправит в чат действие вроде "* ТвойНик сейчас слушает Artist - Title"

__module_name__ = "Now Playing Action"
__module_version__ = "1.1"
__module_description__ = "Sends current music info as /me action using playerctl"

import hexchat
import subprocess

def get_now_playing():
    try:
        # Формат: Artist - Title (Player: player_name)
        output = subprocess.check_output([
            'playerctl', 'metadata', '--format',
            '{{artist}} - {{title}} ({{playerName}})'
        ]).decode('utf-8').strip()
        
        # Если ничего не играет или пустые поля
        if not output or output.startswith(' - ') or output == '( )':
            return "ничего не играет"
        
        return output
    
    except subprocess.CalledProcessError:
        return "ни один плеер не найден"
    except FileNotFoundError:
        return "playerctl не установлен"
    except Exception:
        return "ошибка получения трека"

def now_playing_action_cb(word, word_eol, userdata):
    info = get_now_playing()
    
    # Отправляем как действие (/me)
    hexchat.command(f"me сейчас слушает {info}")
    
    # Опционально: выводим в консоль HexChat для себя
    hexchat.prnt(f"* Ты сейчас слушаешь {info}")
    
    return hexchat.EAT_ALL

# Регистрируем команду /np
hexchat.hook_command("np", now_playing_action_cb, 
                     help="/np — отправить в чат действие с текущим треком")

print(f"{__module_name__} v{__module_version__} загружен. Используй /np")

Данный код вы копируете в файл с любым именем и расширением .py и перемещаете в /home/<ваш_пользователь>/.config/hexchat/addons . После чего через меню включения плагинов и скриптов во вкладке «окно» вы его загружаете через соответствующую кнопку. Для использования во время общения просто вводите /np в поле ввода сообщения.