Files
argon-theme/email-templates/username-change-notify.php
nanhaoluo aeebf39a59 feat: 实现用户名-评论联合检测机制
- 修改 AI 检测提示词,同时判断用户名和评论内容合规性
- 评论合规但用户名不合规时,自动生成唯一随机用户名(用户-XXXXXXXX)
- 基于用户名、IP、UA 生成8位唯一标识码
- 发送邮件通知用户名变更,包含原因和新用户名
- 创建用户名变更通知邮件模板
- 保存原始用户名到评论元数据
- 兼容旧格式 API 响应
- 增加 max_tokens 到 150 以支持更详细的响应
2026-01-22 18:17:39 +08:00

149 lines
5.3 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?php
/**
* Argon 用户名变更通知邮件
*
* 当评论用户名被 AI 识别为不合规并自动修改时发送给评论者
*/
if (!defined('ABSPATH')) {
exit;
}
/**
* 发送用户名变更通知邮件给评论者
*
* @param WP_Comment $comment 评论对象
* @param string $original_username 原始用户名
* @param string $new_username 新用户名
* @param string $reason AI 判断理由
* @param string $detection_code 识别码
* @return bool 发送是否成功
*/
function argon_send_username_change_notify_email($comment, $original_username, $new_username, $reason, $detection_code) {
// 检查评论者是否留了邮箱
if (empty($comment->comment_author_email)) {
return false;
}
// 获取文章信息
$post = get_post($comment->comment_post_ID);
if (!$post) {
return false;
}
// 获取 AI 配置信息
$provider = get_option('argon_ai_summary_provider', 'openai');
$model = get_option('argon_ai_summary_model', '');
$provider_names = [
'openai' => 'OpenAI',
'anthropic' => 'Anthropic',
'deepseek' => 'DeepSeek',
'qianwen' => '通义千问',
'wenxin' => '文心一言',
'doubao' => '豆包',
'kimi' => 'Kimi',
'zhipu' => '智谱',
'siliconflow' => 'SiliconFlow'
];
$provider_display = isset($provider_names[$provider]) ? $provider_names[$provider] : $provider;
// 获取邮件设置
$settings = argon_get_email_settings();
// 构建邮件内容
$email_subject = sprintf(__('您在「%s」的评论用户名已被修改', 'argon'), wp_trim_words($post->post_title, 20));
$email_body = '
<div style="background: #f8f9fa; padding: 32px 24px; border-radius: 8px; margin: 24px 0;">
<h2 style="margin: 0 0 16px 0; color: #32325d; font-size: 20px; font-weight: 600;">
' . __('用户名变更通知', 'argon') . '
</h2>
<p style="margin: 0 0 16px 0; color: #525f7f; font-size: 15px; line-height: 1.6;">
' . sprintf(__('您好,%s', 'argon'), '<strong>' . esc_html($original_username) . '</strong>') . '
</p>
<p style="margin: 0 0 16px 0; color: #525f7f; font-size: 15px; line-height: 1.6;">
' . sprintf(
__('您在文章「<a href="%s" style="color: %s; text-decoration: none;">%s</a>」发表的评论已成功提交,但系统检测到您的用户名可能不符合规范。', 'argon'),
esc_url(get_permalink($post->ID)),
$settings['theme_color'],
esc_html($post->post_title)
) . '
</p>
</div>
<div style="background: #fff3cd; border-left: 4px solid #ffc107; padding: 16px 20px; margin: 24px 0; border-radius: 4px;">
<p style="margin: 0 0 8px 0; color: #856404; font-size: 14px; font-weight: 600;">
' . __('AI 检测结果', 'argon') . '
</p>
<p style="margin: 0; color: #856404; font-size: 14px; line-height: 1.6;">
' . esc_html($reason) . '
</p>
</div>
<div style="background: #f8f9fa; padding: 24px; border-radius: 8px; margin: 24px 0;">
<table style="width: 100%; border-collapse: collapse;">
<tr>
<td style="padding: 8px 0; color: #8898aa; font-size: 14px; width: 100px;">
' . __('原用户名', 'argon') . '
</td>
<td style="padding: 8px 0; color: #32325d; font-size: 14px; font-weight: 500;">
<del>' . esc_html($original_username) . '</del>
</td>
</tr>
<tr>
<td style="padding: 8px 0; color: #8898aa; font-size: 14px;">
' . __('新用户名', 'argon') . '
</td>
<td style="padding: 8px 0; color: ' . $settings['theme_color'] . '; font-size: 14px; font-weight: 600;">
' . esc_html($new_username) . '
</td>
</tr>
</table>
</div>
<div style="background: #e3f2fd; padding: 16px 20px; margin: 24px 0; border-radius: 4px; border-left: 4px solid #2196f3;">
<p style="margin: 0 0 8px 0; color: #1565c0; font-size: 14px; font-weight: 600;">
' . __('温馨提示', 'argon') . '
</p>
<p style="margin: 0; color: #1976d2; font-size: 14px; line-height: 1.6;">
' . __('您的评论内容正常,仅用户名被自动修改。今后发表评论时,请使用符合规范的用户名。', 'argon') . '
</p>
</div>
<div style="margin: 32px 0; text-align: center;">
<a href="' . esc_url(get_permalink($post->ID) . '#comment-' . $comment->comment_ID) . '"
style="display: inline-block; padding: 12px 32px; background: ' . $settings['theme_color'] . '; color: #fff; text-decoration: none; border-radius: 4px; font-size: 15px; font-weight: 500;">
' . __('查看您的评论', 'argon') . '
</a>
</div>
<div style="margin-top: 32px; padding-top: 24px; border-top: 1px solid #e3e8ee;">
<p style="margin: 0 0 8px 0; color: #8898aa; font-size: 13px;">
' . __('检测信息', 'argon') . '
</p>
<table style="width: 100%; font-size: 12px; color: #8898aa;">
<tr>
<td style="padding: 4px 0;">' . __('AI 模型', 'argon') . ':</td>
<td style="padding: 4px 0;">' . esc_html($provider_display) . ' - ' . esc_html($model) . '</td>
</tr>
<tr>
<td style="padding: 4px 0;">' . __('识别码', 'argon') . ':</td>
<td style="padding: 4px 0; font-family: monospace;">' . esc_html($detection_code) . '</td>
</tr>
<tr>
<td style="padding: 4px 0;">' . __('检测时间', 'argon') . ':</td>
<td style="padding: 4px 0;">' . current_time('Y-m-d H:i:s') . '</td>
</tr>
</table>
</div>
';
// 渲染完整邮件
$html = argon_render_email($email_body, ['subject' => $email_subject]);
// 发送邮件
return send_mail($comment->comment_author_email, $email_subject, $html);
}