Commit 502e7220 authored by nanahira's avatar nanahira

add msg length check

parent 7af8dcc4
Pipeline #43343 passed with stages
in 3 minutes and 55 seconds
...@@ -101,6 +101,7 @@ export const TRANSLATIONS = { ...@@ -101,6 +101,7 @@ export const TRANSLATIONS = {
refresh_success: 'Refresh field succeeded.', refresh_success: 'Refresh field succeeded.',
refresh_fail: 'Refresh field failed.', refresh_fail: 'Refresh field failed.',
chat_disabled: 'Chat is disabled in this room.', chat_disabled: 'Chat is disabled in this room.',
chat_warn_level0: 'WARNING: Please stop sending inappropriate messages.',
chat_warn_level1: 'Please avoid sensitive words.', chat_warn_level1: 'Please avoid sensitive words.',
chat_warn_level2: 'Your message contains blocked words.', chat_warn_level2: 'Your message contains blocked words.',
menu_random_duel: 'Random Duel', menu_random_duel: 'Random Duel',
...@@ -271,6 +272,7 @@ export const TRANSLATIONS = { ...@@ -271,6 +272,7 @@ export const TRANSLATIONS = {
refresh_success: '刷新场面成功。', refresh_success: '刷新场面成功。',
refresh_fail: '刷新场面失败。', refresh_fail: '刷新场面失败。',
chat_disabled: '本房间禁止聊天。', chat_disabled: '本房间禁止聊天。',
chat_warn_level0: '请不要发送过长的消息或垃圾信息!',
chat_warn_level1: '请注意发言,敏感词已被替换。', chat_warn_level1: '请注意发言,敏感词已被替换。',
chat_warn_level2: '消息包含敏感词,已被拦截。', chat_warn_level2: '消息包含敏感词,已被拦截。',
menu_random_duel: '随机对战', menu_random_duel: '随机对战',
......
import { ChatColor, YGOProCtosChat } from 'ygopro-msg-encode';
import { Context } from '../app';
export class ChatLengthCheck {
constructor(private ctx: Context) {}
async init() {
this.ctx.middleware(YGOProCtosChat, async (msg, client, next) => {
const content = (msg.msg || '').trim();
if (content.length <= 0) {
return;
}
if (content.length > 100) {
await client.sendChat('#{chat_warn_level0}', ChatColor.RED);
return;
}
return next();
});
}
}
...@@ -12,6 +12,7 @@ import { ClientKeyProvider } from './client-key-provider'; ...@@ -12,6 +12,7 @@ import { ClientKeyProvider } from './client-key-provider';
import { HidePlayerNameProvider } from './hide-player-name-provider'; import { HidePlayerNameProvider } from './hide-player-name-provider';
import { CommandsService, KoishiContextService } from '../koishi'; import { CommandsService, KoishiContextService } from '../koishi';
import { ChatgptService } from './chatgpt-service'; import { ChatgptService } from './chatgpt-service';
import { ChatLengthCheck } from './chat-length-check';
import { CloudReplayService } from './cloud-replay'; import { CloudReplayService } from './cloud-replay';
import { LpLowHintService } from './lp-low-hint-service'; import { LpLowHintService } from './lp-low-hint-service';
import { LockDeckService } from './lock-deck'; import { LockDeckService } from './lock-deck';
...@@ -32,6 +33,7 @@ export const FeatsModule = createAppContext() ...@@ -32,6 +33,7 @@ export const FeatsModule = createAppContext()
.provide(CloudReplayService) // persist duel records .provide(CloudReplayService) // persist duel records
.provide(BlockReplay) // block replay packets for in-room players .provide(BlockReplay) // block replay packets for in-room players
.provide(ChatgptService) // AI-room chat replies .provide(ChatgptService) // AI-room chat replies
.provide(ChatLengthCheck) // block blank/overlong chat messages
.provide(LpLowHintService) // low LP hint in duel .provide(LpLowHintService) // low LP hint in duel
.provide(RoomDeathService) // srvpro-style death mode (model 2) .provide(RoomDeathService) // srvpro-style death mode (model 2)
.provide(RoomAutoDeathService) // auto trigger death mode after duel start .provide(RoomAutoDeathService) // auto trigger death mode after duel start
......
...@@ -92,11 +92,11 @@ export class BadwordProvider extends BaseResourceProvider<BadwordsData> { ...@@ -92,11 +92,11 @@ export class BadwordProvider extends BaseResourceProvider<BadwordsData> {
if (filtered.blocked) { if (filtered.blocked) {
await client.sendChat('#{chat_warn_level2}', ChatColor.RED); await client.sendChat('#{chat_warn_level2}', ChatColor.RED);
return; return;
} } else if (filtered.message !== msg.msg) {
if (filtered.message !== msg.msg) {
msg.msg = filtered.message; msg.msg = filtered.message;
await client.sendChat('#{chat_warn_level1}', ChatColor.BABYBLUE); await client.sendChat('#{chat_warn_level1}', ChatColor.BABYBLUE);
} else if (filtered.level === 0) {
await client.sendChat('#{chat_warn_level0}', ChatColor.BABYBLUE);
} }
return next(); return next();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment