WeeChat Notification Center 项目教程
1. 项目的目录结构及介绍
WeeChat Notification Center 项目的目录结构如下:
weechat-notification-center/
├── .editorconfig
├── .gitattributes
├── LICENSE
├── notification_center.py
├── README.md
├── screenshot.png
└── weechat.png
.editorconfig
: 编辑器配置文件,用于统一代码风格。.gitattributes
: Git 属性配置文件,用于指定文件的属性。LICENSE
: 项目的许可证文件,本项目使用 MIT 许可证。notification_center.py
: 项目的主脚本文件,用于将高亮和私信传递到 macOS 通知中心。README.md
: 项目的说明文档,包含安装和使用说明。screenshot.png
: 项目的截图文件。weechat.png
: 项目的图标文件。
2. 项目的启动文件介绍
项目的启动文件是 notification_center.py
。该文件的主要功能是将 WeeChat 中的高亮消息和私信传递到 macOS 通知中心。以下是该文件的主要内容:
import os
import datetime
import weechat
from pync import Notifier
SCRIPT_NAME = 'notification_center'
SCRIPT_AUTHOR = 'Sindre Sorhus <sindresorhus@gmail.com>'
SCRIPT_VERSION = '1.5.2'
SCRIPT_LICENSE = 'MIT'
SCRIPT_DESC = 'Pass highlights and private messages to the macOS Notification Center'
weechat.register(SCRIPT_NAME, SCRIPT_AUTHOR, SCRIPT_VERSION, SCRIPT_LICENSE, SCRIPT_DESC, '', '')
WEECHAT_VERSION = weechat.info_get('version_number', '') or 0
if int(WEECHAT_VERSION) >= 0x03020000:
WEECHAT_ICON = os.path.join(weechat.info_get('weechat_dir', ''), 'weechat.png')
else:
WEECHAT_ICON = os.path.join(os.path.dirname(__file__), 'weechat.png')
def notify(data, buffer, date, tags, displayed, highlight, prefix, message):
if int(weechat.config_get_plugin('min_notify_level') or 0) > int(highlight):
return weechat.WEECHAT_RC_OK
sound = weechat.config_get_plugin('sound') or None
activate_bundle_id = weechat.config_get_plugin('activate_bundle_id') or None
if 'irc_privmsg' in tags and 'notify_highlight' in tags:
channel = weechat.buffer_get_string(buffer, 'localvar_channel')
if weechat.config_get_plugin('show_message_text') == 'on':
Notifier.notify(message, title='%s @ %s' % (prefix, channel), sound=sound, appIcon=WEECHAT_ICON, activate=activate_bundle_id)
else:
Notifier.notify('In %s by %s' % (channel, prefix), title='Highlighted Message', sound=sound, appIcon=WEECHAT_ICON, activate=activate_bundle_id)
elif weechat.config_get_plugin('show_private_message') == 'on' and 'irc_privmsg' in tags and 'notify_private' in tags:
if weechat.config_get_plugin('show_message_text') == 'on':
Notifier.notify(message, title='%s [private]' % prefix, sound=sound, appIcon=WEECHAT_ICON, activate=activate_bundle_id)
else:
Notifier.notify('From %s' % prefix, title='Private Message', sound=sound, appIcon=WEECHAT_ICON, activate=activate_bundle_id)
return weechat.WEECHAT_RC_OK
weechat.hook_print('', 'irc_privmsg', '', 1, 'notify', '')
该脚本通过 weechat.hook_print
函数监听 WeeChat 中的消息,并根据消息的标签和配置选项决定是否发送通知到