Здравствуйте!
Не уверен, что данная тема подходит именно в этот раздел, но пусть если не подходит её модераторы переместят в правильную. Благодарю за терпение и труд модерации заранее!
Недавно, во время обсуждений на моём 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 в поле ввода сообщения.