Skip to content
On this page

自定义评论事件 Beta

Detalk 支持您的评论前和评论后的事件行为进行自定义。

注意 必读

TIP

这是由 eval 函数实现的,您可以在管理面板的「后端设置」中的「自定义」对其进行随意修改。

WARNING

这些函数可以对提交的评论信息、您的 Detalk 数据库进行随意修改,请在保存配置前确保你已经阅读并理解过代码。如果因为自定义事件中的恶意代码而导致信息泄露、数据库崩溃等事故,Detalk 概不负责。

评论前

传入内容

评论前 (beforeComment) 的实现代码可以见此处

可以看到,函数传入一个 $data 变量。

$data 变量的内容大致如下:

js
let $data = {
// 评论者的昵称
	nickname: "Detalk",
    // 评论者的邮箱
	email: "detalk@example.com",
    // 评论内容,已经 Markdown 解析
	content: "<p>Hello World</p>",
    // 评论者的网址(可能为空)
	url: "http://example.com",
    // 评论时间戳
	timestamp: 1672891465409,
    // IP 地址(目前为空)
	ip: '1.1.1.1',
    // 评论者的 UA
	ua: '',
    // 此条评论的唯一 ID
	rpid: '',
    // 评论者的 Token(可能为空)
	auth: '',
    // 评论者的标识(可能为空,admin 为管理员评论)
	label: '',
    // 是否隐藏
    hide: false,
};

基本格式

此函数在任何评论提交至数据库之前执行,一般可作为垃圾信息检测等。

你无需额外获取 $data,也无需 return 修改过的数据。

$data 变量中的内容将会被默认返回。

代码需遵循 JavaScript 语法,默认包含 fetch (node-fetch@2), Deta (deta), db (Deta Base) 等扩展。

以下是最简单的一个示例:

js
// $data 已经传入,可直接使用
console.log($data);
// 对代码的内容进行修改
$data.content += 'Hello World'; // 评论内容追加 `Hello World`.

这样,每一条新建的评论末尾都会追加 Hello World

更多示例


发起 HTTP 请求

默认已包含 node-fetch@2,可以直接使用 fetch

fetch 是一个 Async 函数,在事件中,你可以这么写:

js
// 在 async 中运行
(async () => {
	// fetch 取得响应数据
	let timestamp = await fetch('https://timestamp-by-cky.deno.dev/').then(res => res.text());
	// ... (以在内容后追加时间戳为例)
    $data.content += timestamp;
})();

关键词评论隐藏

要使评论隐藏,只需要将 $data.hide 设为 true 即可。

js
if ($data.content.match(/测试/g)) {
	$data.hide = true;
}

评论后

传入内容

评论后传入内容与评论前相同,您可以参见此处

基本格式

评论后的基本格式与评论前相同,您可以参见此处

不同的是,评论后数据已被写入数据库,返回任何 $data 都不受影响

此函数只有在评论成功后才执行,一般可作为评论通知等。

为方便推送评论通知功能,afterComment 参数新增 nodemailer 依赖。

Awesome Scripts

Detalk.js 正在维护一个仓库,内有对于 Detalk.js 的强大脚本支持。你可以参见此处


Released under the MIT License.