All Projects → yetibot → Yetibot

yetibot / Yetibot

Licence: epl-1.0
🤖 Extreme chatops bot for Slack and IRC 🔧 New contributors welcome 🏗

Programming Languages

clojure
4091 projects

Projects that are alternatives of or similar to Yetibot

Bolt Python
A framework to build Slack apps using Python
Stars: ✭ 190 (-38.91%)
Mutual labels:  chatbot, slack, chatops
Sactive Bot
😈 An extensible chat bot framework. sactive-bot is an evolution of the open source hubot project. - https://www.shipengqi.top/sactive-bot .
Stars: ✭ 212 (-31.83%)
Mutual labels:  chatbot, slack, chatops
Slacker
Slack Bot Framework
Stars: ✭ 495 (+59.16%)
Mutual labels:  chatbot, slack, chatops
Flottbot
A chatbot framework written in Go. All configurations are made in YAML files, or inside scripts written in your favorite language.
Stars: ✭ 175 (-43.73%)
Mutual labels:  chatbot, slack, chatops
hubot-code-review
A Hubot script for GitHub code review on Slack.
Stars: ✭ 38 (-87.78%)
Mutual labels:  slack, chatops, chatbot
Cog
Bringing the power of the command line to chat
Stars: ✭ 910 (+192.6%)
Mutual labels:  chatbot, slack, chatops
st2chatops
Packaging environment for building StackStorm chatops native packages
Stars: ✭ 26 (-91.64%)
Mutual labels:  slack, chatops, irc
Cdk Constructs
A collection of higher-level aws cdk constructs: slack-approval-workflow, #slack & msteams notifications, chatops, blue-green-container-deployment, codecommit-backup, OWASP dependency-check, contentful-webhook, github-webhook, stripe-webhook, static-website, pull-request-check, pull-request-approval-rule, codepipeline-merge-action, codepipeline-check-parameter-action...
Stars: ✭ 282 (-9.32%)
Mutual labels:  slack, chatops
Mojo Webqq
【重要通知:WebQQ将在2019年1月1日停止服务,此项目目前已停止维护,感谢大家四年来的一路陪伴】使用Perl语言(不会没关系)编写的smartqq/webqq客户端框架(非GUI),可通过插件提供基于HTTP协议的api接口供其他语言或系统调用
Stars: ✭ 1,755 (+464.31%)
Mutual labels:  chatbot, irc
Chatskills
Run and debug Alexa skills on the command-line. Create bots. Run them in Slack. Run them anywhere!
Stars: ✭ 171 (-45.02%)
Mutual labels:  chatbot, slack
Errbot
Errbot is a chatbot, a daemon that connects to your favorite chat service and bring your tools and some fun into the conversation.
Stars: ✭ 2,605 (+737.62%)
Mutual labels:  chatbot, chatops
Awesome Bots
The most awesome list about bots ⭐️🤖
Stars: ✭ 2,864 (+820.9%)
Mutual labels:  chatbot, slack
twitch-bot-tutorial
Official repo of the "Building a Python Twitch bot (2020)" series.
Stars: ✭ 21 (-93.25%)
Mutual labels:  irc, chatbot
Fantasy football chat bot
GroupMe Discord and Slack Chatbot for ESPN Fantasy Football
Stars: ✭ 166 (-46.62%)
Mutual labels:  chatbot, slack
Watson Online Store
Learn how to use Watson Assistant and Watson Discovery. This application demonstrates a simple abstraction of a chatbot interacting with a Cloudant NoSQL database, using a Slack UI.
Stars: ✭ 156 (-49.84%)
Mutual labels:  chatbot, slack
Lookerbot
Lookerbot lets you access all your Looker data from Slack! Super fun!
Stars: ✭ 138 (-55.63%)
Mutual labels:  chatbot, slack
lita-irc
An IRC adapter for Lita.
Stars: ✭ 19 (-93.89%)
Mutual labels:  chatops, irc
lita-hipchat
A HipChat adapter for Lita.
Stars: ✭ 37 (-88.1%)
Mutual labels:  chatops, chatbot
Messaging Apis
Messaging APIs for multi-platform
Stars: ✭ 1,754 (+463.99%)
Mutual labels:  chatbot, slack
Claudia Bot Builder
Create chat bots for Facebook Messenger, Slack, Amazon Alexa, Skype, Telegram, Viber, Line, GroupMe, Kik and Twilio and deploy to AWS Lambda in minutes
Stars: ✭ 1,717 (+452.09%)
Mutual labels:  chatbot, slack

A chat bot written in Clojure, at your service.

Yetibot

Slack Build Status Yetibot Outdated dependencies Yetibot on Docker Hub Codecov

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.

This project is supported by:

New contributors

Welcome new contributors!

  • Feel free to tackle any issue
  • Issues labeled good first issue are good for first time Yetibot contributors
  • Ask @devth for 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:

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 #yetibot channel or join Yetibot Slack!
  • [x] Design & build yetibot.comDone!
  • [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:

  1. Follow the Docker instructions: the fastest way if you're already using Docker.

  2. yetibot-helm: the official Helm Chart for quickly running Yetibot on Kubernetes.

  3. 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.

  4. 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...)

    Yetibot

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

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)

Combo

!echo `repeat 4 echo i don't always repeat myself but | unwords`…StackOverflowError | meme interesting:

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 this room
room settings <key> # show the value for a single setting

Slack: bots can't join a channel on their own, they must be invited, so room configuration doesn't apply. Instead, /invite @yetibot to any channel that you're in, and /kick @yetibot if you want it to leave. NB: you might need special privileges in order to kick.

Campfire is no longer supported. If you use Campfire, open an issue and we can add it back in!

Other chat platforms: If your chat platform of choice is not supported, open an issue. Adding adapters is quite easy.

Broadcast

If a room has broadcast set to true, Tweets will be posted to that room. By default all rooms have it set to false. To enable:

!room set broadcast true

Help

Yetibot self-documents itself using the docstrings of its various commands. Ask it for !help to get a list of help topics. !help all shows fully expanded command list for each topic.

!help | join ,
Use help <topic> for more details, !, <gen>that, alias, ascii, asciichart,
attack, buffer, catfact, chat, chuck, classnamer, clj, cls, complete, config,
count, curl, ebay, echo, eval, features, gh, giftv, grep, haiku, head, help,
history, horse, hs, http, image, info, jargon, jen, join, js, keys, list, log,
mail, meme, memethat, mustachefact, number, order, poke, poms, random, raw,
react, reload, repeat, rest, reverse, rhyme, scala, scalex, sed, set, sort, source,
split, ssh, status, tail, take, tee, twitter, update, uptime, urban, users,
vals, weather, wiki, wolfram, wordnik, words, xargs, xkcd, zen

Plugins

Yetibot has a plugin-based architecture. Its core which all plugins depend on is yetibot.core.

yetibot.core

Yetibot will load all commands and observers with namespaces on the classpath matching these regexes.

This lets you build any number of independent plugin projects and combine them via standard Leiningen dependencies.

How it works

Curious how the internals of Yetibot works? At a high level:

  1. commands are run through a parser built on InstaParse:
  2. an InstaParse transformer is configured to evaluate expressions through the interpreter, which handles things like nested sub-expressions and piped commands
  3. command namespaces are hooked into the interpreter's handle-cmd function using a cmd-hook macro and triggered via regex prefix matching

Getting help

If the docs or implementation code don't serve you well, please open a pull request and explain why so we can improve the docs. Also feel free to open an issue for feature requests!

Yetibot in the wild

License

Copyright © 2012-2019 Trevor Hartman. Distributed under the Eclipse Public License 1.0, the same as Clojure.

Logo designed by Freeform Design Co.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].