mirror of
https://github.com/syuilo/ai.git
synced 2024-11-09 23:48:01 +00:00
Compare commits
3 commits
c81e5b7974
...
54f10b3321
Author | SHA1 | Date | |
---|---|---|---|
54f10b3321 | |||
9ba856a87d | |||
0a180d069c |
34
package.json
34
package.json
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_v": "2.0.0",
|
||||
"_v": "2.0.1",
|
||||
"type": "module",
|
||||
"main": "./built/index.js",
|
||||
"scripts": {
|
||||
|
@ -38,38 +38,6 @@
|
|||
"ws": "8.16.0"
|
||||
},
|
||||
"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": {
|
||||
"ignore": ["memory.json"]
|
||||
|
|
|
@ -105,7 +105,7 @@ export default class 藍 {
|
|||
|
||||
@bindThis
|
||||
public log(msg: string) {
|
||||
log(chalk`[{magenta AiOS}]: ${msg}`);
|
||||
log(`[${chalk.magenta('AiOS')}]: ${msg}`);
|
||||
}
|
||||
|
||||
@bindThis
|
||||
|
|
|
@ -89,10 +89,10 @@ export default class extends Module {
|
|||
|
||||
@bindThis
|
||||
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)!;
|
||||
if (friend != null) {
|
||||
strength = friend.doc.reversiStrength ?? 4;
|
||||
strength = friend.doc.reversiStrength ?? 5;
|
||||
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/**/*"
|
||||
],
|
||||
"exclude": [
|
||||
"node_modules",
|
||||
"test/**/*"
|
||||
"node_modules"
|
||||
],
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue