import type { PluginConfigFields, SerializedEvent } from '@clusterio/lib'; export class InstanceActionEvent { static type = 'event'; static src = 'instance'; static dst = 'controller'; static plugin = 'ClusterChatSync'; instanceName: string; action: string; content: string; constructor(instanceName: string, action: string, content: string) { this.instanceName = instanceName; this.action = action; this.content = content; } 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], };