mirror of
https://github.com/syuilo/ai.git
synced 2024-12-04 16:51:09 +00:00
✌️
This commit is contained in:
parent
c81e5b7974
commit
0a180d069c
32
package.json
32
package.json
|
@ -38,38 +38,6 @@
|
||||||
"ws": "8.16.0"
|
"ws": "8.16.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@koa/router": "9.4.0",
|
|
||||||
"@types/jest": "26.0.23",
|
|
||||||
"@types/koa": "2.13.1",
|
|
||||||
"@types/koa__router": "8.0.4",
|
|
||||||
"@types/websocket": "1.0.10",
|
|
||||||
"jest": "26.6.3",
|
|
||||||
"koa": "2.13.1",
|
|
||||||
"koa-json-body": "5.3.0",
|
|
||||||
"ts-jest": "26.5.6",
|
|
||||||
"websocket": "1.0.34"
|
|
||||||
},
|
|
||||||
"_moduleAliases": {
|
|
||||||
"@": "built"
|
|
||||||
},
|
|
||||||
"jest": {
|
|
||||||
"testRegex": "/test/.*",
|
|
||||||
"moduleFileExtensions": [
|
|
||||||
"ts",
|
|
||||||
"js"
|
|
||||||
],
|
|
||||||
"transform": {
|
|
||||||
"^.+\\.ts$": "ts-jest"
|
|
||||||
},
|
|
||||||
"globals": {
|
|
||||||
"ts-jest": {
|
|
||||||
"tsConfig": "test/tsconfig.json"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"moduleNameMapper": {
|
|
||||||
"^@/(.+)": "<rootDir>/src/$1",
|
|
||||||
"^#/(.+)": "<rootDir>/test/$1"
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
"nodemonConfig": {
|
"nodemonConfig": {
|
||||||
"ignore": ["memory.json"]
|
"ignore": ["memory.json"]
|
||||||
|
|
|
@ -89,10 +89,10 @@ export default class extends Module {
|
||||||
|
|
||||||
@bindThis
|
@bindThis
|
||||||
private onReversiGameStart(game: any) {
|
private onReversiGameStart(game: any) {
|
||||||
let strength = 4;
|
let strength = 5;
|
||||||
const friend = this.ai.lookupFriend(game.user1Id !== this.ai.account.id ? game.user1Id : game.user2Id)!;
|
const friend = this.ai.lookupFriend(game.user1Id !== this.ai.account.id ? game.user1Id : game.user2Id)!;
|
||||||
if (friend != null) {
|
if (friend != null) {
|
||||||
strength = friend.doc.reversiStrength ?? 4;
|
strength = friend.doc.reversiStrength ?? 5;
|
||||||
friend.updateReversiStrength(null);
|
friend.updateReversiStrength(null);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,7 +0,0 @@
|
||||||
export const account = {
|
|
||||||
id: '0',
|
|
||||||
name: '藍',
|
|
||||||
username: 'ai',
|
|
||||||
host: null,
|
|
||||||
isBot: true,
|
|
||||||
};
|
|
|
@ -1,67 +0,0 @@
|
||||||
import * as http from 'http';
|
|
||||||
import * as Koa from 'koa';
|
|
||||||
import * as websocket from 'websocket';
|
|
||||||
|
|
||||||
export class Misskey {
|
|
||||||
private server: http.Server;
|
|
||||||
private streaming: websocket.connection;
|
|
||||||
|
|
||||||
constructor() {
|
|
||||||
const app = new Koa();
|
|
||||||
|
|
||||||
this.server = http.createServer(app.callback());
|
|
||||||
|
|
||||||
const ws = new websocket.server({
|
|
||||||
httpServer: this.server
|
|
||||||
});
|
|
||||||
|
|
||||||
ws.on('request', async (request) => {
|
|
||||||
const q = request.resourceURL.query as ParsedUrlQuery;
|
|
||||||
|
|
||||||
this.streaming = request.accept();
|
|
||||||
});
|
|
||||||
|
|
||||||
this.server.listen(3000);
|
|
||||||
}
|
|
||||||
|
|
||||||
public waitForStreamingMessage(handler) {
|
|
||||||
return new Promise((resolve, reject) => {
|
|
||||||
const onMessage = (data: websocket.IMessage) => {
|
|
||||||
if (data.utf8Data == null) return;
|
|
||||||
const message = JSON.parse(data.utf8Data);
|
|
||||||
const result = handler(message);
|
|
||||||
if (result) {
|
|
||||||
this.streaming.off('message', onMessage);
|
|
||||||
resolve();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
this.streaming.on('message', onMessage);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
public async waitForMainChannelConnected() {
|
|
||||||
await this.waitForStreamingMessage(message => {
|
|
||||||
const { type, body } = message;
|
|
||||||
if (type === 'connect') {
|
|
||||||
const { channel, id, params, pong } = body;
|
|
||||||
|
|
||||||
if (channel !== 'main') return;
|
|
||||||
|
|
||||||
if (pong) {
|
|
||||||
this.sendStreamingMessage('connected', {
|
|
||||||
id: id
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
public sendStreamingMessage(type: string, payload: any) {
|
|
||||||
this.streaming.send(JSON.stringify({
|
|
||||||
type: type,
|
|
||||||
body: payload
|
|
||||||
}));
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,17 +0,0 @@
|
||||||
import * as websocket from 'websocket';
|
|
||||||
|
|
||||||
export class StreamingApi {
|
|
||||||
private ws: WS;
|
|
||||||
|
|
||||||
constructor() {
|
|
||||||
this.ws = new WS('ws://localhost/streaming');
|
|
||||||
}
|
|
||||||
|
|
||||||
public async waitForMainChannelConnected() {
|
|
||||||
await expect(this.ws).toReceiveMessage("hello");
|
|
||||||
}
|
|
||||||
|
|
||||||
public send(message) {
|
|
||||||
this.ws.send(JSON.stringify(message));
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,26 +0,0 @@
|
||||||
import { bindThis } from '@/decorators.js';
|
|
||||||
import Module from '@/module.js';
|
|
||||||
import Message from '@/message';
|
|
||||||
|
|
||||||
export default class extends Module {
|
|
||||||
public readonly name = 'test';
|
|
||||||
|
|
||||||
@bindThis
|
|
||||||
public install() {
|
|
||||||
return {
|
|
||||||
mentionHook: this.mentionHook
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
@bindThis
|
|
||||||
private async mentionHook(msg: Message) {
|
|
||||||
if (msg.text && msg.text.includes('ping')) {
|
|
||||||
msg.reply('PONG!', {
|
|
||||||
immediate: true
|
|
||||||
});
|
|
||||||
return true;
|
|
||||||
} else {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
20
test/core.ts
20
test/core.ts
|
@ -1,20 +0,0 @@
|
||||||
import 藍 from '@/ai';
|
|
||||||
import { account } from '#/__mocks__/account';
|
|
||||||
import TestModule from '#/__modules__/test';
|
|
||||||
import { StreamingApi } from '#/__mocks__/ws';
|
|
||||||
|
|
||||||
process.env.NODE_ENV = 'test';
|
|
||||||
|
|
||||||
let ai: 藍;
|
|
||||||
|
|
||||||
beforeEach(() => {
|
|
||||||
ai = new 藍(account, [
|
|
||||||
new TestModule(),
|
|
||||||
]);
|
|
||||||
});
|
|
||||||
|
|
||||||
test('mention hook', async () => {
|
|
||||||
const streaming = new StreamingApi();
|
|
||||||
|
|
||||||
|
|
||||||
});
|
|
|
@ -1,15 +0,0 @@
|
||||||
{
|
|
||||||
"extends": "../tsconfig.json",
|
|
||||||
"compilerOptions": {
|
|
||||||
"baseUrl": ".",
|
|
||||||
"rootDir": "../",
|
|
||||||
"paths": {
|
|
||||||
"@/*": ["../src/*"],
|
|
||||||
"#/*": ["./*"]
|
|
||||||
},
|
|
||||||
},
|
|
||||||
"compileOnSave": false,
|
|
||||||
"include": [
|
|
||||||
"**/*.ts"
|
|
||||||
]
|
|
||||||
}
|
|
|
@ -40,7 +40,6 @@
|
||||||
"src/**/*"
|
"src/**/*"
|
||||||
],
|
],
|
||||||
"exclude": [
|
"exclude": [
|
||||||
"node_modules",
|
"node_modules"
|
||||||
"test/**/*"
|
|
||||||
],
|
],
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue