表情、敏感词
这篇解决什么
系统表情包和个人表情落哪张表、敏感词何时拦截。读完能对上 im_face_pack / im_face_user_item / im_sensitive_word,以及私聊群聊发送前会 validateText。
默认端口 48080。先完成 IM 功能设计。发文本拦截的细节也见 敏感词。
示意图:表情是素材。敏感词在发文本时拦,不进表情包表。
从哪改
| 名称 | 说明 | 仓库路径 |
|---|---|---|
| C 端表情包 | @RequestMapping("/im/face-pack") | ruoyi-office/yudao-module-im/.../face/ImFacePackController.java |
| C 端我的表情 | /im/face-user-item | ImFaceUserItemController |
| 运营表情包 | /im/manager/face-pack | ImFacePackManagerController |
| 运营表情项 | /im/manager/face-pack-item | ImFacePackItemManagerController |
| 运营敏感词 | /im/manager/sensitive-word | ImSensitiveWordManagerController |
| 校验 | ImSensitiveWordServiceImpl | sensitiveword/ |
运营页:views/im/manager/face/pack/、face/userItem/、sensitiveword/。输入框表情:views/im/home/.../face-picker.vue。
系统包:im_face_pack + im_face_pack_item(packId、图 URL、宽高、排序)。个人表情:im_face_user_item,上限 yudao.im.face.user-item-max-count,默认 200。
敏感词用 SensitiveWordBs,按租户本地缓存,CRUD 后本机立刻失效,多实例最长约 1 分钟刷新。只校验启用词。私聊 ImPrivateMessageServiceImpl、群聊 ImGroupMessageServiceImpl 发文本时调用 validateText。
字段
| 名称 | 说明 | 仓库路径 |
|---|---|---|
name / icon / sort / status | 表情包元数据 | ImFacePackDO |
packId / url / width / height | 包内单张 | ImFacePackItemDO |
userId / url | 个人表情 | ImFaceUserItemDO |
word / status | 敏感词 | ImSensitiveWordDO |
status 用 CommonStatusEnum:0 开启,1 关闭。
不是系统词库那张表
基础设施「敏感词」和 IM 这张 im_sensitive_word 不是同一套。发 IM 文本只查本表。
频道推送不走这套校验
频道是运营单向素材。敏感词拦的是用户私聊 / 群聊文本。
按本仓库 DO 生成的 ER。
配置与操作
走 表情管理(7570)下的 系统表情(7571,/im/face/pack)。填 name、icon、sort,status 0 开 / 1 关。点「管理表情」维护 im_face_pack_item(url、宽高、排序)。个人表情上限看 YAML yudao.im.face.user-item-max-count,默认 200。运营台账在 用户表情(7580,/im/face/user-item),这里只查不发。
敏感词管理(7560,/im/sensitive-word)维护 im_sensitive_word 的 word + status。只校验启用词。CRUD 后本机立刻失效缓存;多实例最长约 1 分钟刷新。私聊 / 群聊只有文本类型 101 会 validateText,命中抛 MESSAGE_SENSITIVE_WORD_BLOCKED,消息不入库。图片、语音、表情不走这层。频道推送不走这套校验。开启见 IM 功能设计。

本系统截图:IM 即时通讯 → 表情管理 → 系统表情。包在 im_face_pack。

本系统截图:敏感词管理。发 IM 文本只查这张 im_sensitive_word。
