# Butter Robot

![Status badge](https://woodpecker.local.fmartingr.dev/api/badges/5/status.svg)

Go framework to create bots for several platforms.

![Butter Robot](./assets/icon@120.png)

> What is my purpose?

## Features

- Support for multiple chat platforms (Slack (untested!), Telegram)
- Plugin system for easy extension
- Admin interface for managing channels and plugins
- Message queue for asynchronous processing

## Documentation

[Go to documentation](./docs)

### Database Management

ButterRobot includes an automatic database migration system. Migrations are applied automatically when the application starts, ensuring your database schema is always up to date.

[Learn more about migrations](./docs/migrations.md)

## Installation

### From Source

```bash
# Clone the repository
git clone https://git.nakama.town/fmartingr/butterrobot.git
cd butterrobot

# Build the application
go build -o butterrobot ./cmd/butterrobot
```

### Containers

The `fmartingr/butterrobot/butterrobot` container image is published on Github packages:

```bash
docker pull docker.pkg.git.nakama.town/fmartingr/butterrobot/butterrobot:latest
docker run -d --name butterrobot -p 8080:8080 docker.pkg.git.nakama.town/fmartingr/butterrobot/butterrobot:latest
```

## Configuration

Configuration is done through environment variables:

- `DEBUG`: Set to "y" to enable debug mode
- `BUTTERROBOT_HOSTNAME`: Hostname for webhook URLs
- `LOG_LEVEL`: Logging level (DEBUG, INFO, WARN, ERROR)
- `SECRET_KEY`: Secret key for sessions and password hashing
- `DATABASE_PATH`: Path to SQLite database file

### Platform-specific configuration

#### Slack

- `SLACK_TOKEN`: Slack app access token
- `SLACK_BOT_OAUTH_ACCESS_TOKEN`: Slack bot OAuth access token

#### Telegram

- `TELEGRAM_TOKEN`: Telegram bot token

## Contributing

```bash
git clone git@github.com:fmartingr/butterrobot.git
cd butterrobot
go mod download
```

Create a `.env-local` file with the required environment variables:

```
SLACK_TOKEN=xxx
TELEGRAM_TOKEN=xxx
...
```

And then you can run it directly:

```bash
go run ./cmd/butterrobot/main.go
```

## License

GPL-2.0
