Skip to content
/ Eco.js Public

A full WebAPI Interface for ECO GameServers for remote automated management and bots.

License

Notifications You must be signed in to change notification settings

Ecojs/Eco.js

Repository files navigation

npm GitHub Sponsors GitHub issues GitHub npm bundle size (scoped) Codacy Badge GitHub GitHub commit activity

GitHub package.json version GitHub release (latest SemVer)

ECO API Interface

Eco.js is a full WebAPI Interface for ECO GameServers for remote automated management and bots.

Tip

Just want an RCON library and not the full toolset? Check out @eco.js/rcon.

Installation

npm install eco.js

Setup

Eco.js

Important

Eco.js requires an APIAdminAuthToken to make any authenticated calls. A Non-admin or User token can be used for limited read-only access. You must also enable AllowDebugCalls to make use of Chat features. Both of these can be found in the Users.eco config file on your server.

  • base_url - The WebServerUrl (or IP) & WebServerPort as defined in Network.eco config.
  • api_key - The APIAdminAuthToken as defined in Users.eco config.
  • serverVirtualPlayerName - The name for the Server when using Chat. (Default [Server])
  • serverChatUpdateInterval - Time (in ms) between checks for new chat messages.

Note

If base_url or api_key options are omitted from the EcoJSConfig object, the library will read that variable from the following ENV variables:

  • ECO_BASE_URL
  • ECO_API_KEY

Tip

To disable chat polling, pass serverChatUpdateInterval: 0 to the Startup perms.

Documentation

Documentation can be found HERE

Docs

Support Discord

https://discord.gg/uzeWjVTPSQ

Usage

import { ECO } from 'eco.js';
// const { ECO } = await import('eco.js');
const server = new ECO({
  base_url: 'https://127.0.0.1:3001',
  api_key: 'myAwesomeAPIAdminToken', // Admin Token **REQUIRED** for full features
  serverVirtualPlayerName: '[Server]', // Name of the Bot when Messaging users
  serverChatUpdateInterval: 5000, // Polling Interval for new messages, in Milliseconds
});

server.isReady.then(() => {
  server.on('CHAT_MESSAGE', (chat_message) => {
    if (
      chat_message.Receiver == 'General' &&
      chat_message.Text?.startsWith('!kickme')
    ) {
      chat_message.senderUser.kick('User ran !kickme');
    }
  });
});

TextUtils

import { TextUtils } from 'eco.js';
const { color, foldout, table, italic, bold } = TextUtils;

server.chat.sendChat(
  '#General',
  `I can also do ${color('Colored Text', '#ffaa00')}, ${italic(
    bold('Styling'),
  )} and ${foldout(
    color('Hoverable Text', '#00ff00'),
    'With Tables!',
    table([
      ['Column 1', 'Column2'],
      ['Much', 'Wow'],
    ]),
  )}`,
);

ColorTextDemo