From 29ff61748b346540d81f01c7c3f7d05d592765cf Mon Sep 17 00:00:00 2001 From: John Smith Date: Thu, 7 Mar 2024 21:25:02 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=8F=92=E4=BB=B6=E7=AE=A1?= =?UTF-8?q?=E7=90=86=E5=89=8D=E7=AB=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .dockerignore | 3 + api/plugin.py | 13 +- frontend/src/api/plugins.js | 16 +++ frontend/src/lang/en.js | 23 +++- frontend/src/lang/ja.js | 23 +++- frontend/src/lang/zh.js | 20 +++- frontend/src/layout/Sidebar.vue | 3 + frontend/src/main.js | 3 +- frontend/src/views/Plugins.vue | 183 +++++++++++++++++++++++++++++ plugins/msg-logging/plugin.json | 2 +- plugins/text-to-speech/plugin.json | 2 +- services/plugin.py | 37 +++--- 12 files changed, 303 insertions(+), 25 deletions(-) create mode 100644 frontend/src/api/plugins.js create mode 100644 frontend/src/views/Plugins.vue diff --git a/.dockerignore b/.dockerignore index 4c7a859..6821a3b 100644 --- a/.dockerignore +++ b/.dockerignore @@ -24,4 +24,7 @@ data/emoticons/* !data/custom_public/ data/custom_public/* !data/custom_public/README.txt +!data/plugins/ +data/plugins/* +!data/plugins/.gitkeep log/* diff --git a/api/plugin.py b/api/plugin.py index daafb42..5ccfa7c 100644 --- a/api/plugin.py +++ b/api/plugin.py @@ -24,6 +24,8 @@ class _AdminHandlerBase(api.base.ApiHandler): if not cfg.enable_admin_plugins: raise tornado.web.HTTPError(403) + logger.info('client=%s requesting admin plugin, cls=%s', self.request.remote_ip, type(self).__name__) + super().prepare() def _get_plugin(self): @@ -60,16 +62,21 @@ class EnableHandler(_AdminHandlerBase): enabled = bool(self.json_args.get('enabled', False)) plugin = self._get_plugin() + old_enabled = plugin.enabled + is_switch_success = True msg = '' try: plugin.enabled = enabled - except services.plugin.StartTooFrequently as e: + except services.plugin.SwitchTooFrequently as e: + is_switch_success = False msg = str(e) - plugin.enabled = False - except services.plugin.StartPluginError as e: + plugin.enabled = old_enabled + except services.plugin.SwitchPluginError as e: + is_switch_success = False msg = str(e) self.write({ 'enabled': plugin.enabled, + 'isSwitchSuccess': is_switch_success, 'msg': msg }) diff --git a/frontend/src/api/plugins.js b/frontend/src/api/plugins.js new file mode 100644 index 0000000..c293e75 --- /dev/null +++ b/frontend/src/api/plugins.js @@ -0,0 +1,16 @@ +import axios from 'axios' + +export async function getPlugins() { + return (await axios.get('/api/plugin/plugins')).data +} + +export async function setEnabled(pluginId, enabled) { + return (await axios.post('/api/plugin/enable_plugin', { + pluginId, + enabled + })).data +} + +export async function openAdminUi(pluginId) { + return (await axios.post('/api/plugin/open_admin_ui', { pluginId })).data +} diff --git a/frontend/src/lang/en.js b/frontend/src/lang/en.js index ab481b6..13cbcef 100644 --- a/frontend/src/lang/en.js +++ b/frontend/src/lang/en.js @@ -3,6 +3,7 @@ export default { home: 'Home', stylegen: 'Style Generator', help: 'Help', + plugins: 'Plugins', links: 'Links', projectAddress: 'Project Address', discussion: 'Discussions', @@ -169,5 +170,25 @@ export default { sendGift: 'Sent {giftName}x{num}', membershipTitle: 'New member', tickerMembership: 'Member' - } + }, + plugins: { + plugins: 'Plugins', + help: 'Help', + helpContent: `\ +

Plugins can add more functionality to blivechat, such as message logging, text to speech, song requests, etc. Plugins may + be developed by third-party authors, and the security and quality are the responsibility of the plugin author. You can + find some published plugins in GitHub Discussions

+

Plugin installation method: Put the extracted plugin directory into the "data/plugins" directory, then restart blivechat

+

Notes: Most plugins require enabling the "Relay messages by the server" option and connecting to the room + in order to receive messages

+

+ Plugin development documentation

+`, + author: 'Author: ', + disabledByServer: 'Administration for plugins is disabled by the server', + admin: 'Admin', + connected: 'Connected', + unconnected: 'Unconnected', + }, } diff --git a/frontend/src/lang/ja.js b/frontend/src/lang/ja.js index 093b187..a90fbb6 100644 --- a/frontend/src/lang/ja.js +++ b/frontend/src/lang/ja.js @@ -3,6 +3,7 @@ export default { home: 'トップページ', stylegen: 'スタイルジェネレータ', help: 'ヘルプ', + plugins: 'プラグイン', links: 'リンク', projectAddress: 'プロジェクトアドレス', discussion: '議論', @@ -169,5 +170,25 @@ export default { sendGift: '{giftName}x{num} を贈りました', membershipTitle: '新規メンバー', tickerMembership: 'メンバー' - } + }, + plugins: { + plugins: 'プラグイン', + help: 'ヘルプ', + helpContent: `\ +

プラグインは、メッセージの記録、テキスト読み上げ、曲リクエストなど、blivechatにさらなる機能を追加できます。 + プラグインはサードパーティの作者によって開発される場合があり、セキュリティと品質はプラグイン作者の責任です。 + いくつかの公開されたプラグインはGitHub Discussionsで見つけることができます

+

プラグインのインストール方法:抽出されたプラグインディレクトリを「data/plugins」ディレクトリに配置し、blivechatを再起動します

+

注意:ほとんどのプラグインは、「サーバを介してメッセージを転送する」オプションを有効にし、メッセージを受信するために + ルームに接続する必要があります

+

プラグイン開発ドキュメント

+`, + author: '作者:', + disabledByServer: 'プラグインの管理は、サーバーによって無効にされています', + admin: '管理', + connected: '接続済み', + unconnected: '未接続', + }, } diff --git a/frontend/src/lang/zh.js b/frontend/src/lang/zh.js index 035d0bb..921e1d6 100644 --- a/frontend/src/lang/zh.js +++ b/frontend/src/lang/zh.js @@ -3,6 +3,7 @@ export default { home: '首页', stylegen: '样式生成器', help: '帮助', + plugins: '插件', links: '常用链接', projectAddress: '项目地址', discussion: '反馈 / 交流', @@ -169,5 +170,22 @@ export default { sendGift: '赠送 {giftName}x{num}', membershipTitle: '新会员', tickerMembership: '会员' - } + }, + plugins: { + plugins: '插件', + help: '帮助', + helpContent: `\ +

插件可以给blivechat添加更多功能,比如消息日志、语音播报、点歌等。插件可能由第三方作者开发,其安全性和质量由插件作者负责。 + 你可以在GitHub Discussions获取一些已发布的插件

+

插件安装方法:把解压后的插件目录放到“data/plugins”目录,然后重启blivechat

+

注意事项:大部分插件需要开启“通过服务器转发消息”,并且连接到房间,才能接收消息

+

插件开发文档

+`, + author: '作者:', + disabledByServer: '已被服务器禁用', + admin: '管理', + connected: '已连接', + unconnected: '未连接', + }, } diff --git a/frontend/src/layout/Sidebar.vue b/frontend/src/layout/Sidebar.vue index 402aeeb..77f5977 100644 --- a/frontend/src/layout/Sidebar.vue +++ b/frontend/src/layout/Sidebar.vue @@ -16,6 +16,9 @@ {{ $t('sidebar.help') }} + + {{ $t('sidebar.plugins') }} +