Yetibot
π€ Extreme chatops bot for Slack, Discord, Mattermost, IRC π§ New contributors welcome π
Install / Use
/learn @yetibot/YetibotREADME
Yetibot
<p align="center"> <a href="http://slack.yetibot.com"><img src="https://img.shields.io/badge/Yetibot%20Slack-%E2%9C%8C%EF%B8%8F-55C4D4.svg?style=for-the-badge" alt="Slack" data-canonical-src="https://img.shields.io/badge/Yetibot%20Slack-%E2%9C%8C%EF%B8%8F-55C4D4.svg?style=for-the-badge" style="max-width:100%;"></a> <a href="https://github.com/yetibot/yetibot/actions/workflows/test.yml"><img alt="GitHub Workflow Status" src="https://img.shields.io/github/actions/workflow/status/yetibot/yetibot/test.yml?style=for-the-badge"></a> <a href="https://clojars.org/yetibot"><img src="https://img.shields.io/clojars/v/yetibot.svg?style=for-the-badge" alt="Yetibot" data-canonical-src="https://img.shields.io/clojars/v/yetibot.svg?style=for-the-badge" style="max-width:100%;"></a> <a href="https://versions.deps.co/yetibot/yetibot"><img src="https://img.shields.io/badge/dynamic/json.svg?label=deps&url=https%3A%2F%2Fversions.deps.co%2Fyetibot%2Fyetibot%2Fstatus.json&query=%24.stats..[%22out-of-date%22]&suffix=%20out%20of%20date&style=for-the-badge&colorB=lightgrey" alt="Outdated dependencies"></a> <a href="https://hub.docker.com/r/yetibot/yetibot/"><img src="https://img.shields.io/badge/Docker-%F0%9F%90%B3-FDDE68.svg?style=for-the-badge" alt="Yetibot on Docker Hub" data-canonical-src="https://img.shields.io/badge/Docker-%F0%9F%90%B3-FDDE68.svg?style=for-the-badge" style="max-width:100%;"></a> <a href="https://codecov.io/gh/yetibot/yetibot"><img src="https://img.shields.io/codecov/c/github/yetibot/yetibot.svg?style=for-the-badge" alt="Codecov" data-canonical-src="https://img.shields.io/codecov/c/github/yetibot/yetibot.svg?style=for-the-badge" style="max-width:100%;"></a> </p>You can think of Yetibot as a communal command line. It excels at:
- teaching: how to run internal automation, language evaluation for JS, Scala, Clojure, and Haskell
- productivity: automating things around Jenkins, JIRA, running SSH commands on various servers, and interacting with internal APIs via private Yetibot plugins
- fun: Google image search, gif lookups, meme generation
Features that make Yetibot powerful and great, which is to say fun:
- Unix-style pipes allow tremendous expressiveness in chaining together complex and flexible commands.
- Sub-expressions let you embed the output of one command into an outer command. They can be nested as many levels deep as you can imagine (open a PR to add to EXAMPLES if you come up with something crazy!).
- Aliases let you parameterize complex expressions and give them a name allowing your team to quickly build up idiomatic team-specific Yetibot usages (not just memes!).
- Per-channel settings let you store arbitrary config at the channel level, which can be used by commands or aliases to change the behavior of commands depending on which channel you're in (e.g. the default JIRA project(s) for a channel).
- Feature category toggle lets you disable or enable entire categories of commands per-channel; useful for disabling gifs in the work-only channel π.
Take a look at the usage examples to see some ~~fun~~ useful things it can do.
<p>This project is supported by:</p> <p> <a href="https://www.digitalocean.com/"> <img src="https://opensource.nyc3.cdn.digitaloceanspaces.com/attribution/assets/SVG/DO_Logo_horizontal_blue.svg" width="201px"> </a> </p>New contributors
Welcome new contributors!
- Feel free to tackle any issue
- Issues labeled
good first issueare good for first time Yetibot contributors - Ask
@devthfor help on Slack, GitHub or anywhere else you can find him
Use it right now
Get an invite to the official Yetibot slack at slack.yetibot.com. There's Yetibot running on a Droplet generously provided by DigitalOcean that you can play with in Slack.
Getting started
To quickly try out Yetibot with minimal config:
- See the Getting Started docs including a Docker Compose example
- Yetibot on Docker docs if you want to run it with Docker
Yetibot users
Already using Yetibot? Please add yourself to the list of Yetibot users!
Contributing
See CONTRIBUTING.
Road map
Yetibot has been undergoing continuous improvement since its inception. These are the immediate priorities, in addition to any bug fixes. Feedback and contributions are very welcome!
- [x] Write docs on how to develop Yetibot - See the Dev Guide
- [x] Dockerize Yetibot. Done! Check out the instructions.
- [x] Integrate with StackStorm for automation on steriods. Done! Check out yetibot-stackstorm.
- [ ] Create a Heroku deploy button to make it easy to get started
- [ ] Make adapters plugable
- [ ] Create more examples of plugins (e.g. Travis)
- [x] Run a demo Yetibot instance β you can now talk to a Yetibot on Freenode in
the
#yetibotchannel or join Yetibot Slack! - [x] Design & build yetibot.com β <em>Done!</em>
- [x] Flatten the config and obtain it via environ to follow 12 Factor App practices #570
Installation
There are a few ways to run Yetibot:
-
Follow the Docker instructions: the fastest way if you're already using Docker.
-
yetibot-helm: the official Helm Chart for quickly running Yetibot on Kubernetes.
-
Clone this repo: this gives you a standard Yetibot installation and provides a git-ignored place to store configuration. Run from the root dir with
lein run. -
Make your own repo and depend on Yetibot: this gives you ultimate customizability, allowing you to depend on custom Yetibot plugins or define your own commands in-project, and gives you control over where you store your config (manual management, commit to private git repo, etc...)
Configuration
See Configuration docs.
Usage
For more docs see the User Guide.
All commands are prefixed by !.
Pipes
Output from one command can be piped to another, like Unix pipes.
!complete does IE support | xargs echo %s? No, it is sucky.
does ie support html5? No, it is sucky.
does ie support css3? No, it is sucky.
does ie support svg? No, it is sucky.
does ie support media queries? No, it is sucky.
does ie support ftps? No, it is sucky.
does ie support png? No, it is sucky.
does ie support canvas? No, it is sucky.
does ie support @font-face? No, it is sucky.
does ie support webgl? No, it is sucky.
does ie support ttf? No, it is sucky.
Backticks
Backticks provide a lightweight syntax for sub-expressions, but they can't be nested.
!meme grumpy cat: `catfact` / False
<img src="http://cdn.memegenerator.net/instances/500x/33734863.jpg" />
Nested sub-expressions
For arbitrarily-nested sub-expressions, use $(expr) syntax, which
disambiguates the open and closing of an expressions.
!meme philos: $(complete how does one $(users | random | letters | random) | random)
<img src="http://i.imgflip.com/z4d45.jpg" />
Combo
!echo `repeat 4 echo i don't always repeat myself but | unwords`β¦StackOverflowError | meme interesting:
<img src="http://i.imgflip.com/z4d6f.jpg" />
Aliases
You can build your own aliases at runtime. These are stored in the configured database, so upon restart they are restored.
!alias nogrid = repeat 3 echo `repeat 3 meme grumpy: no | join`
Pipes can be used, but the right-hand side must be quoted in order to treat it as a literal instead of being evaluated according to normal pipe behavior.
!alias i5 = "random | echo http://icons.wunderground.com/webcamramdisk/w/a/wadot/324/current.jpg?t=%s&.jpg"
You can specify placeholder arguments on the right-hand side using $s to
indicate all arguments, or $n (where n is a 1-based index of which arg).
!alias temp = "weather $s | head 2 | tail"
!temp 98104
=> 33.6 F (0.9 C), Overcast
Adapter config
IRC: Yetibot can listen on any number of channels. You configure
channels in
config.edn.
You can also invite Yetibot to a channel at runtime using the IRC /invite
command:
/invite yetibot #whoa
When you invite Yetibot to a new channel, config.edn is overwritten, so next
time you restart Yetibot, it will re-join the same channels.
You can also use the !room command to tell yetibot to join or leave a channel.
!help room
room join <room> # join <room>
room leave <room> # leave <room>
room list # list rooms that yetibot is in
room set <key> <value> # configure a setting for the current room
room settings # show all chat settings for thi
Related Skills
imsg
325.9kiMessage/SMS CLI for listing chats, history, and sending messages via Messages.app.
node-connect
325.9kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
slack
325.9kUse when you need to control Slack from OpenClaw via the slack tool, including reacting to messages or pinning/unpinning items in Slack channels or DMs.
prose
325.9kOpenProse VM skill pack. Activate on any `prose` command, .prose files, or OpenProse mentions; orchestrates multi-agent workflows.
