Skip to content

subecho/KarmaChameleon

Repository files navigation

Karma Chameleon

License: GPL v3

A simple karma bot for Slack.

This is a simple, standalone Slack bot that watches for “karma events” and will keep track of scores for users and topics.

Adding Karma

In a channel where Karma Chameleon is present, do the following to add a point to a user or topic.

@user++

subject++

Removing Karma

In a channel where Karma Chameleon is present, do the following to remove a point from the user or topic.

@user—-

subject--

Note that decrementing or incrementing a user's own karma (the self-bump) is not a valid operation. You will be chastised by the Chameleon.

Setting up a Development Environment

Karma Chameleon relies on pip to install its dependencies and is easiest to develop with a Python Virtual Environment.

$ git clone https://github.com/subecho/KarmaChameleon.git
$ cd KarmaChameleon
$ python3 -m venv .venv
$ source .venv/bin/activate
(.venv) $ python3 -m pip install -r requirements.txt

Running the Bot in a Development Environment

Before running the code, we need to do some initial setup on the Slack side so that Slack knows who we are, we are who we say we are, and which events we wish to subscribe to. You will need to create a new app in Slack and add the following scopes:

Bot Token Scopes:

  • channels:history
  • channels:join
  • channels:manage
  • chat:write
  • chat:write.customize
  • chat:write.public
  • commands
  • users:read

App-Level Tokens Scopes:

  • connections:write

User Token Scopes:

  • channels:history

There are two steps to testing the bot on your local machine: running the code and forwarding the port on which Karma Chameleon is listening to some publicly available URL. The CLI tool ngrok may be used to do this.

The following environment variables must be present in order for Karma Chameleon to function:

  • SLACK_BOT_TOKEN: populated with the contents of the SLACK_BOT_TOKEN OAuth key in the Slack App OAuth settings
  • SLACK_APP_TOKEN: populated with the contents of an App-Level Token specifically generated for use with socket mode, which may be found in Slack App Basic Information
  • KARMA_FILE_PATH: the path to which Karma Chameleon will create and maintain a JSON record of all karma.

In one terminal window, run: python3 karma_chameleon.py

After running that, in another terminal window, run: ngrok http 3000

This command will output an https URL that can be used to interact with the bot. You will want to paste this URL into the Request URL field in the Event Subscriptions page for your app. The format of the URL should be "/slack/events". You will also want to make sure that you add the message.channels event to the subscribed events for the bot. For slash-command support, a new command must be added with the request URL also being the ngrok URL in the format of "/slack/events".

The Karma Chameleon icon was made by Eucalyp from www.flaticon.com.