Commit ed9e336c authored by nanahira's avatar nanahira

welcome module

parent 638f3121
Pipeline #43197 passed with stages
in 1 minute and 33 seconds
......@@ -11,6 +11,10 @@
- 如果 Room 的事件不够,可以加,然后在对应的点加 dispatch。
- Room 的事件不要依赖 YGOProMsgStart 或者 YGOProMsgWin 这样的直接消息事件(经常会不准,这些事件只适合用来构建 replay),应该依赖 Room 专用事件。
- 定义 middleware 如果不是拦截消息,必须 return next()
- 引用规范:
- 目录内引用:同级文件使用 `'./xxx'`,子目录文件使用 `'../xxx'`
- 目录外引用:必须通过 index.ts 引用,如 `'../room'` `'../client'`(指向 index.ts)
- 禁止直接引用具体文件:不要使用 `'../room/room'` `'../client/client'` 这样的路径
## 模块结构
......@@ -30,13 +34,13 @@
## 参考项目
可以参考电脑的下面的项目,用来参考
可以参考电脑的下面的项目,用来参考。这些代码只能看,不能改。~ 指代这台电脑的 HOME 目录。
- ygopro-msg-encode(js 协议库): ~/ygo/ygopro-msg-encode
- koishipro-core.js(wasm 层): ~/ygo/koishipro-core.js
- ocgcore(YGOPro ocgcore 内核): ~/ygo/ygopro/ocgcore
- ygopro(YGOPro 主程序服务端): ~/ygo/ygopro/gframe
- srvpro(本项目的上一代): ~/ygo/ygopro/srvpro-koishi
- srvpro(本项目的上一代): ~/ygo/srvpro-koishi
- yuzuthread(多线程执行器): ~/test/yuzuthread
- typed-reflector(反射器): ~/test/koishi-related/typed-reflector
- nfkit(工具库,事件触发器,IoC): ~/test/nfkit
......@@ -19,6 +19,7 @@ DECK_EXTRA_MAX: "15"
DECK_SIDE_MAX: "15"
DECK_MAX_COPIES: "3"
OCGCORE_DEBUG_LOG: ""
WELCOME: ""
HOSTINFO_LFLIST: "0"
HOSTINFO_RULE: "0"
HOSTINFO_MODE: "0"
......
......@@ -29,6 +29,7 @@ export const defaultConfig = {
DECK_SIDE_MAX: '15',
DECK_MAX_COPIES: '3',
OCGCORE_DEBUG_LOG: '',
WELCOME: '',
...(Object.fromEntries(
Object.entries(DefaultHostinfo).map(([key, value]) => [
`HOSTINFO_${key.toUpperCase()}`,
......
import { createAppContext } from 'nfkit';
import { ClientVersionCheck } from './client-version-check';
import { ContextState } from '../app';
import { Welcome } from './welcome';
export const FeatsModule = createAppContext<ContextState>()
.provide(ClientVersionCheck)
.provide(Welcome)
.define();
import { ChatColor } from 'ygopro-msg-encode';
import { Context } from '../app';
import { OnRoomJoin } from '../room/room-event/on-room-join';
declare module '../room' {
interface Room {
welcome: string;
welcome2: string;
}
}
export class Welcome {
private welcomeMessage = this.ctx.getConfig('WELCOME');
constructor(private ctx: Context) {
this.ctx.middleware(OnRoomJoin, async (event, client, next) => {
const room = event.room;
if (this.welcomeMessage) {
await client.sendChat(this.welcomeMessage, ChatColor.GREEN);
}
if (room.welcome) {
await client.sendChat(room.welcome, ChatColor.BABYBLUE);
}
if (room.welcome2) {
await client.sendChat(room.welcome2, ChatColor.PINK);
}
return next();
});
}
}
......@@ -3,7 +3,7 @@ import { Context } from '../app';
import { getSpecificFields } from '../utility/metadata';
import { RoomMethodOptions } from '../utility/decorators';
import { Room } from './room';
import { Client } from '../client/client';
import { Client } from '../client';
import { YGOProCtosBase } from 'ygopro-msg-encode';
import { RoomManager } from './room-manager';
import { makeArray } from 'nfkit';
......
......@@ -61,7 +61,7 @@ import {
} from 'koishipro-core.js';
import { YGOProResourceLoader } from './ygopro-resource-loader';
import { blankLFList } from '../utility/blank-lflist';
import { Client } from '../client/client';
import { Client } from '../client';
import { RoomMethod } from '../utility/decorators';
import { YGOProCtosDisconnect } from '../utility/ygopro-ctos-disconnect';
import { DuelStage } from './duel-stage';
......
import { AppContext, ProtoMiddlewareDispatcher } from 'nfkit';
import { Client } from '../client/client';
import { Client } from '../client';
export class Emitter extends ProtoMiddlewareDispatcher<[client: Client]> {
constructor(private ctx: AppContext) {
......
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