Skip to content

WFCD/genesis

Repository files navigation

Project Genesis Genesis Avatar

Supported by the Warframe Community Developers semantic-release: angular

A Discord.js bot for tracking Warframe alerts, invasions and more.

Contribute

Crowdin Discord

Live Public Bot info

Discord Bots Discord Bots Discord Bots

JetBrains

Thank you to JetBrains for providing us with free licenses to their great tools.

Feel free to submit a pull request. We are working on build checks and tests, and we use aribnb's codestyle and eslint configuration. Plugins for auto-linting on save are available for many popular editors.

Thanks, Discord... Legalese things

Due to the New Discord T.O.S , if you continue to use, participate, be in, or not leave Cephalon Sanctuary, you agree to allowing me, any person, user, or member, any bot, service, app, and anything to collect, use, transmit, or any data related to your user account, any data made available by Discord in the API or SDK, any metadata from your user account, any messages and or content you send, and anything else you do or give by staying in Cephalon Sanctuary, or by using my bot.

If you do not agree to letting Genesis, Oratoris, or any other bot there do so, please kick Genesis from your servers.

tl;dr Bots need data. While I don't record any of your personal data or save it off for long-term use, I still need to tell you that bots can access your messages and user ID. If you don't want that, get rid of all of them, cause they all need that data.

Installation

  1. Clone this repo

    # For SSH
    git clone git@github.wfcd/genesis.git
    
    # For HTTPS
    git clone https://github.com/WFCD/genesis.git
  2. Install mysql server and configure a database to store settings and data

  3. Run npm i

  4. Start bot with pm2 using a copy of the provided pm2.json file. The scripts assume it's named genesis.json

  5. See below for available config / commands

Configuration

Genesis requires a MySQL server. It uses the MYSQL_* environment variables for determining where to connect to

Base

Environment Variable Description Example Default
TOKEN Discord connection token mfa.234089sdfasdf20dfada,f.asd N\A
LOG_LEVEL Logging level of the bot, including info, debug, error, fatal DEBUG ERROR
MYSQL_DB MySQL database name, used for connecting to data provider and storage genesis genesis
MYSQL_PASSWORD MySQL database connection password password N\A
MYSQL_USER MySQL database connection user genesis genesis
MYSQL_PORT MySQL database connection port 3306 3306
MYSQL_HOST Hostname for conneting to MySQL localhost localhost
SHARD_OFFSET Offset of the first shard id for the local shards, default 0 2 0
LOCAL_SHARDS Number of shards locally 2 1
SHARDS Total number of shards 1 1
OWNER ID of the person owning/running the bot, used for checking permissions
PREFIX Default prefix to use for the instance \ \
RAVEN_URL DSN url for logging data to Sentry 'https://***:***@sentry.io/***' N\A
CONTROL_WH_ID Webhook id for the control webhook for system notifications '0293485092348490834' N\A
CONTROL_WH_TOKEN Webhook token for the control webhook for system notifications asdpiofja[ospdj34095u8340wpodfj+_asdf-oja N\A
BUG_WH_ID Webhook id for the bug webhook '0293485092348490834' N\A
BUG_WH_TOKEN Webhook token for the bug webhook asdpiofja[ospdj34095u8340wpodfj+_asdf-oja N\A

Stats tracking

Environment Variable Description Example Default
DISCORD_BOTS_WEB_TOKEN Token used to update bots.discord.pw bot statistics as;dofiahsdf N\A
DISCORD_BOTS_WEB_USER Bot user id on bots.discord.pw to update with server count 6456514654966321321 N\A
DISCORD_CARBON_TOKEN Carbonitex bot token for posting server data to Carbonitex as;dofiahsdf N\A

Flair configuration

Environment Variable Description Example Default
EMBED_URL Default link that embeds use in their title https://warframestat.us https://warframestat.us
EMBED_ICON_URL Default icon URL that embeds use in their footer https://warframestat.us/wfcd_logo_color.png https://warframestat.us/wfcd_logo_color.png
BASE_PRES_MSG Default presence message @Bot help @Bot help
BASE_PRES_ACT Default presence activity. Must be a valid discord.js value WATCHING PLAYING

Feature Flags

Environment Variable Description Example Default
GAMES Feature flags to enable WARFRAME,UTIL,LOGGING CORE
  • CORE does not need to be specified ever, it will always load
Flag Feature Default
CORE Core features of the bot
UTIL Common utility functions that are domain agnostic, such as LFG and builds
LOGGING Just what it sounds like, logging guild actions
CODES Managing promo codes, like Warframe Glyph codes
FUN Fun stuff, like 8Ball and corgis
WARFRAME Warframe functionality, like tracking and Warframe informational Commands
DESTINY2 For an in-progress section allowing people to expand Genesis into Destiny 2
GIVEAWAYS Giveaway functionality
CUST_CMDS Custom commands - user-generated simple commands
ROOMS Automated & manual room creation
BLOCK Enable user disable features
CMD_MGMT Command management
BOT_MGMT Bot Management

Setting up Twitch

Environment Variable Description Example Default
TWITCH_CLIENT_ID Twitch Client ID for querying Twitch API uo6dggojyb8d6soh92zknwmi5ej1q2 N/A
TWITCH_USER_LOGIN The Twitch user login to watch warframe warframe
TWITCH_POLL_INTERVAL_MS How often to poll Twitch for stream updates (in milliseconds) 10000 10000

In order to setup Twitch you need to specify your Twitch API Client ID. See the following link on how to get one:

Other Features

Environment Variable Description Example Default
LFG_ACTIVE_COLOR Hex color as a string for an active LFG embed "0xaf01ff" "0x9370db"
LFG_EXPIRED_COLOR Hex color as a string for an expired LFG embed "0xff0000" "0xff0000"

Commands

Honestly too many to put here

License

License: Apache 2.0

Private Docker Build!

Want to build your own image? All you (should) need to do is:

  • clone this repo
  • install docker
  • install nodejs (and npm)
  • run npm run build (builds the docker image and punishes locally)
  • Copy docker-compose.example.yaml and update the environment variables to your needing
  • Run docker-compose up -d
  • If you'd like to check logs, use docker logs genesis --follow