From 1c18a639c17283b50c24c3369f8df33ef297458a Mon Sep 17 00:00:00 2001 From: PHIDIAS Date: Fri, 15 Aug 2025 19:19:18 +0900 Subject: [PATCH] . --- controller.ts | 4 +-- info.js | 81 ----------------------------------------------- info.ts | 88 +++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 90 insertions(+), 83 deletions(-) delete mode 100644 info.js create mode 100644 info.ts diff --git a/controller.ts b/controller.ts index 2a2fdde..86d9ace 100644 --- a/controller.ts +++ b/controller.ts @@ -1,8 +1,8 @@ import { Client, GatewayIntentBits } from 'discord.js'; import fetch from 'node-fetch'; import { BaseControllerPlugin } from '@clusterio/controller'; -import { InstanceActionEvent } from './info'; -import { ChatEvent } from './message'; +import { InstanceActionEvent } from './info.ts'; +import { ChatEvent } from './message.ts'; const MAX_DISCORD_MESSAGE_LENGTH = 1950; const MIN_CONFIDENCE_SCORE = 10.0; diff --git a/info.js b/info.js deleted file mode 100644 index a3652cc..0000000 --- a/info.js +++ /dev/null @@ -1,81 +0,0 @@ -'use strict'; -const lib = require('@clusterio/lib'); - -class InstanceActionEvent { - static type = 'event'; - static src = 'instance'; - static dst = 'controller'; - static plugin = 'ClusterChatSync'; - - constructor(instanceName, action, content) { - this.instanceName = instanceName; - this.action = action; - this.content = content; - } - - static jsonSchema = { - type: 'object', - required: ['instanceName', 'action', 'content'], - properties: {'instanceName': {type: 'string'}, 'action': {type: 'string'}, 'content': {type: 'string'}} - } - - static fromJSON(json) { - return new this(json.instanceName, json.action, json.content); - } -} - -const plugin = { - name: 'ClusterChatSync', - title: 'Cluster Chat Sync', - description: 'One way chat sync.', - instanceEntrypoint: 'instance', - controllerEntrypoint: 'controller', - controllerConfigFields: { - 'ClusterChatSync.discord_bot_token': { - title: 'Discord Bot Token', - description: 'API Token', - type: 'string' - }, - 'ClusterChatSync.datetime_on_message': { - title: 'Message Datetime', - description: 'Append datetime in front', - type: 'boolean', - initialValue: true - }, - 'ClusterChatSync.discord_channel_mapping': { - title: 'Channels', - description: 'Putting the discord channel id and instance relations here', - type: 'object', - initialValue: { - 'S1': '123' - }, - }, - 'ClusterChatSync.use_libretranslate': { - title: 'Translate Message', - description: 'Using self host or paid service of libretranslate', - type: 'boolean', - initialValue: false - }, - 'ClusterChatSync.libretranslate_url': { - title: 'Translate Server URL', - description: 'Including http protocol, and the port if needed', - type: 'string', - initialValue: 'http://localhost:5000' - }, - 'ClusterChatSync.libretranslate_key': { - title: 'Translate Server API Key', - description: 'The API key for the translate server', - type: 'string', - initialValue: '123456' - }, - 'ClusterChatSync.libretranslate_language': { - title: 'Translate Server Target Language', - description: 'Put a space between each language, using ISO 639-1 codes', - type: 'string', - initialValue: 'zh-Hant en' - }, - }, - messages: [InstanceActionEvent], -}; - -module.exports = {plugin, InstanceActionEvent}; diff --git a/info.ts b/info.ts new file mode 100644 index 0000000..11207b7 --- /dev/null +++ b/info.ts @@ -0,0 +1,88 @@ +import type { PluginConfigFields, SerializedEvent } from '@clusterio/lib'; + +export class InstanceActionEvent { + static type = 'event'; + static src = 'instance'; + static dst = 'controller'; + static plugin = 'ClusterChatSync'; + + constructor( + public instanceName: string, + public action: string, + public content: string + ) {} + + static jsonSchema = { + type: 'object', + required: ['instanceName', 'action', 'content'] as const, + properties: { + instanceName: { type: 'string' }, + action: { type: 'string' }, + content: { type: 'string' } + } + }; + + static fromJSON(json: SerializedEvent): InstanceActionEvent { + return new this(json.instanceName, json.action, json.content); + } +} + +interface ChannelMapping { + [instanceName: string]: string; +} + +const pluginConfigFields: PluginConfigFields = { + 'ClusterChatSync.discord_bot_token': { + title: 'Discord Bot Token', + description: 'API Token', + type: 'string', + }, + 'ClusterChatSync.datetime_on_message': { + title: 'Message Datetime', + description: 'Append datetime in front', + type: 'boolean', + initialValue: true, + }, + 'ClusterChatSync.discord_channel_mapping': { + title: 'Channels', + description: 'Putting the discord channel id and instance relations here', + type: 'object', + initialValue: { + 'S1': '123' + } as ChannelMapping, + }, + 'ClusterChatSync.use_libretranslate': { + title: 'Translate Message', + description: 'Using self host or paid service of libretranslate', + type: 'boolean', + initialValue: false, + }, + 'ClusterChatSync.libretranslate_url': { + title: 'Translate Server URL', + description: 'Including http protocol, and the port if needed', + type: 'string', + initialValue: 'http://localhost:5000', + }, + 'ClusterChatSync.libretranslate_key': { + title: 'Translate Server API Key', + description: 'The API key for the translate server', + type: 'string', + initialValue: '123456', + }, + 'ClusterChatSync.libretranslate_language': { + title: 'Translate Server Target Language', + description: 'Put a space between each language, using ISO 639-1 codes', + type: 'string', + initialValue: 'zh-Hant en', + }, +}; + +export const plugin = { + name: 'ClusterChatSync', + title: 'Cluster Chat Sync', + description: 'One way chat sync.', + instanceEntrypoint: 'instance', + controllerEntrypoint: 'controller', + controllerConfigFields: pluginConfigFields, + messages: [InstanceActionEvent], +};