Quickstart
eevee, the lovable chatbot framework!
What is eevee?
eevee is a microservices architecture chatbot framework that lives in k8s
and consists of independent modules that communicate through a common message bus, NATS
Getting Started
The only supported deployment method for eevee is with Helm. FluxCD is recommended.
Installing with Helm
To install eevee using Helm, you’ll first need to add the eevee Helm repository:
helm repo add eevee https://helm.eevee.bot/
helm repo update
Create a values.yaml file for your deployment. An example is provided below.
Then, you can install eevee with the following commands:
kubectl create ns eevee-bot
helm install eevee-crds eevee/eevee-crds \
--namespace eevee-bot
helm install eevee eevee/eevee \
--namespace eevee-bot \
--values values.yaml
values.yaml
# Sample values.yaml for eevee Helm chart
# Values for operator chart
operator:
# Enable the operator chart
enabled: true
# Values for bot chart
bot:
# Name of this bot
name: eevee-bot
# IPC Configuration
ipcConfig:
# Name of the IPC config resource
name: eevee-bot
spec:
# NATS configuration
nats:
# Managed NATS deployment configuration
managed:
# Should the eevee-operator deploy a NATS server for us?
enabled: true
# NATS container image to use
image: docker.io/nats:latest
# NATS token authentication configuration
token:
# Should the eevee-operator generate a token for NATS auth?
generate: true
# Secret reference
secretKeyRef:
secret:
name: nats-auth-secret
key: token
# Bot Modules
botModules:
- name: toolbox
spec:
# Number of toolbox instances to deploy
size: 1
# Container image to use
image: ghcr.io/eeveebot/cli:1.2.9
# Image pull policy
pullPolicy: Always
# Enable metrics
metrics: true
# Metrics port
metricsPort: 8080
# IPC configuration name
ipcConfig: eevee-bot
# Module name - this identifies it as a toolbox
moduleName: toolbox
- name: router
spec:
# Number of module instances to deploy
size: 1
# Container image to use
image: ghcr.io/eeveebot/router:1.2.15
# Image pull policy
pullPolicy: Always
# Enable metrics
metrics: true
# Metrics port
metricsPort: 8080
# IPC configuration name
ipcConfig: eevee-bot
# Module name - this identifies it as a router
moduleName: router
# Router configuration
moduleConfig: |
blocklist:
- pattern: ".*"
enabled: true
description: "Ignore all from fishy-bot"
platform: "irc"
instance: "irc-wetfish-net"
user: "fishy.*"
- name: admin
spec:
# Number of module instances to deploy
size: 1
# Container image to use
image: ghcr.io/eeveebot/admin:1.2.19
# Image pull policy
pullPolicy: Always
# Enable metrics
metrics: false
# Metrics port
metricsPort: 8080
# IPC configuration name
ipcConfig: eevee-bot
# Module name
moduleName: admin
mountOperatorApiToken: true
moduleConfig: |
admins:
- displayName: "goos"
# Unique identifier for this admin
uuid: "0aeb8706-a7fa-4783-be4b-1856ac51af13"
# Platforms this admin is accepted on (regex patterns)
acceptedPlatforms:
- "irc"
# Authentication methods for this admin
authentication:
# Currently supporting IRC hostmask identification
irc:
hostmask: "goos@Fish-tri.8c3.136.150.IP"
ratelimits:
join:
mode: drop
level: user
limit: 100
interval: 1m
part:
mode: drop
level: user
limit: 100
interval: 1m
showRatelimits:
mode: drop
level: user
limit: 100
interval: 1m
moduleUptime:
mode: drop
level: user
limit: 100
interval: 1m
moduleRestart:
mode: drop
level: user
limit: 100
interval: 1m
showCommandRegistry:
mode: drop
level: user
limit: 100
interval: 1m
listBotModules:
mode: drop
level: user
limit: 100
interval: 1m
- name: echo
spec:
# Number of module instances to deploy
size: 1
# Container image to use
image: ghcr.io/eeveebot/echo:1.2.10
# Image pull policy
pullPolicy: Always
# Enable metrics
metrics: false
# Metrics port
metricsPort: 8080
# IPC configuration name
ipcConfig: eevee-bot
# Module name
moduleName: echo
# Module config
moduleConfig: |
ratelimit:
mode: drop
level: user
limit: 5
interval: 1m
- name: emote
spec:
# Number of module instances to deploy
size: 1
# Container image to use
image: ghcr.io/eeveebot/emote:1.2.9
# Image pull policy
pullPolicy: Always
# Enable metrics
metrics: false
# Metrics port
metricsPort: 8080
# IPC configuration name
ipcConfig: eevee-bot
# Module name
moduleName: emote
# Module config
moduleConfig: |
ratelimit:
mode: drop
level: user
limit: 10
interval: 1m
- name: seen
spec:
size: 1
image: ghcr.io/eeveebot/seen:1.1.3
pullPolicy: Always
metrics: true
metricsPort: 8080
ipcConfig: eevee-bot
moduleName: seen
moduleConfig: |
ratelimit:
mode: drop
level: user
limit: 5
interval: 1m
# Persistent Volume Claim
persistentVolumeClaim:
storageClassName: filesystem
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
- name: help
spec:
# Number of module instances to deploy
size: 1
# Container image to use
image: ghcr.io/eeveebot/help:2.2.11
# Image pull policy
pullPolicy: Always
# Enable metrics
metrics: false
# Metrics port
metricsPort: 8080
# IPC configuration name
ipcConfig: eevee-bot
# Module name
moduleName: help
# Module config
moduleConfig: |
ratelimit:
mode: drop
level: user
limit: 10
interval: 1m
- name: calculator
spec:
# Number of module instances to deploy
size: 1
# Container image to use
image: ghcr.io/eeveebot/calculator:1.2.9
# Image pull policy
pullPolicy: Always
# Enable metrics
metrics: false
# Metrics port
metricsPort: 8080
# IPC configuration name
ipcConfig: eevee-bot
# Module name
moduleName: calculator
# Module config
moduleConfig: |
ratelimit:
mode: drop
level: user
limit: 10
interval: 1m
- name: dice
spec:
# Number of module instances to deploy
size: 1
# Container image to use
image: ghcr.io/eeveebot/dice:1.2.9
# Image pull policy
pullPolicy: Always
# Enable metrics
metrics: false
# Metrics port
metricsPort: 8080
# IPC configuration name
ipcConfig: eevee-bot
# Module name
moduleName: dice
# Module config
moduleConfig: |
ratelimit:
mode: drop
level: user
limit: 10
interval: 1m
- name: urltitle
spec:
# Number of module instances to deploy
size: 1
# Container image to use
image: ghcr.io/eeveebot/urltitle:2.2.8
# Image pull policy
pullPolicy: Always
# Enable metrics
metrics: false
# Metrics port
metricsPort: 8080
# IPC configuration name
ipcConfig: eevee-bot
# Module name
moduleName: urltitle
# Module config
moduleConfig: |
ratelimit:
mode: drop
level: user
limit: 5
interval: 1m
envSecret:
name: eevee-bot-urltitle-secrets
- name: weather
spec:
# Number of module instances to deploy
size: 1
# Container image to use
image: ghcr.io/eeveebot/weather:1.2.9
# Image pull policy
pullPolicy: Always
# Enable metrics
metrics: false
# Metrics port
metricsPort: 8080
# IPC configuration name
ipcConfig: eevee-bot
# Module name
moduleName: weather
# Module config
moduleConfig: |
ratelimit:
mode: drop
level: user
limit: 5
interval: 1m
envSecret:
name: eevee-bot-weather-secrets
# Persistent Volume Claim
persistentVolumeClaim:
storageClassName: filesystem
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
- name: tell
spec:
# Number of module instances to deploy
size: 1
# Container image to use
image: ghcr.io/eeveebot/tell:2.2.15
# Image pull policy
pullPolicy: Always
# Enable metrics
metrics: false
# Metrics port
metricsPort: 8080
# IPC configuration name
ipcConfig: eevee-bot
# Module name
moduleName: tell
# Module config
moduleConfig: |
ratelimit:
mode: drop
level: user
limit: 5
interval: 1m
# Persistent Volume Claim
persistentVolumeClaim:
storageClassName: filesystem
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
- name: connector-irc-wetfish
spec:
# Number of module instances to deploy
size: 1
# Container image to use
image: ghcr.io/eeveebot/connector-irc:1.2.8
# Image pull policy
pullPolicy: Always
# Enable metrics
metrics: true
# Metrics port
metricsPort: 8080
# IPC configuration name
ipcConfig: eevee-bot
# Module name - this identifies it as an IRC connector
moduleName: irc
# IRC configuration
moduleConfig: |
# List of IRC connections
connections:
# Display name for this network (no . or * or > allowed)
- name: irc-wetfish-net
# Enable this connection
enabled: true
# IRC connection configuration
irc:
host: irc.wetfish.net
port: 6697
ssl: true
autoReconnect: true
autoReconnectWait: 5000
autoReconnectMaxRetries: 10
autoRejoin: true
autoRejoinWait: 5000
autoRejoinMaxRetries: 5
pingInterval: 30
pingTimeout: 120
# IRC Ident information
ident:
nick: eevee
username: eevee
gecos: eevee.bot
version: "0.4.20"
quitMsg: "eevee 0.4.20"
# Actions to take after connecting
postConnect:
- # Join channels after connecting
action: join
join:
- channel: '#eevee'
- channel: '#botspam'
- channel: '#wetfish'
# Send broadcast events for all received messages
broadcastMessages: true
# Settings related to command modules
commands:
# Common prefix regex to add to registered command regexes
commonPrefixRegex: "^-"
- name: connector-discord-main
spec:
# Number of module instances to deploy
size: 1
# Container image to use
image: ghcr.io/eeveebot/connector-discord:latest
# Image pull policy
pullPolicy: Always
# Enable metrics
metrics: true
# Metrics port
metricsPort: 8080
# IPC configuration name
ipcConfig: eevee-bot
# Module name - this identifies it as a Discord connector
moduleName: discord
# Discord configuration
moduleConfig: |
# List of Discord connections
connections:
# Display name for this guild (no . or * or > allowed)
- name: discord-main-guild
# Enable this connection
enabled: true
# Discord connection configuration
discord:
# Bot token (should be stored in a Kubernetes secret)
token: "YOUR_BOT_TOKEN_HERE"
autoReconnect: true
autoReconnectWait: 5000
autoReconnectMaxRetries: 10
# Actions to take after connecting
postConnect:
- # Join channels after connecting
action: join
join:
- channel: 'general'
- channel: 'bots'
# Send broadcast events for all received messages
broadcastMessages: true
# Settings related to command modules
commands:
# Common prefix regex to add to registered command regexes
commonPrefixRegex: "^-"
This will deploy the eevee operator and all core modules to your Kubernetes cluster.
Installing with FluxCD
For production deployments, we recommend using FluxCD for GitOps-based deployment. Our reference deployment configuration can be found in the gitops repository.
The deployment includes:
- Custom Resource Definitions (CRDs)
- Namespace repository configuration
- Helm release configuration with all bot modules
- Namespace creation
- Secret management for sensitive configuration
License
All eevee components are covered under Attribution-NonCommercial-ShareAlike 4.0 International
See LICENSE for details.