PyBites Karmabot - A Python based Slack Chatbot
A Python based Slack Chatbot for Community interaction
Karmabot's main features is the management of Karma within the slack community server. You can give karma, reduce karma, check your current karma points and manage your karma related username.
Additional commands / features are:
- Jokes powered by PyJokes
- Overview on top channels of the slack server
- Random Python tip, quote or nugget from CodeChalleng.es
- Browse and search python documentation, "pydoc help"
pip install karmabot
After installing you can start karmabot by using the command
However, you need to supply some settings prior to this.
By default we will look for a
.karmabot file in the directory you used the
karmabot command. The file should supply the following information.
KARMABOT_SLACK_USER= KARMABOT_SLACK_TOKEN= KARMABOT_SLACK_INVITE_USER_TOKEN= KARMABOT_DATABASE_URL= KARMABOT_GENERAL_CHANNEL= KARMABOT_ADMINS=
KARMABOT_SLACK_USER The bot's slack user id. Once you've created your own Karmabot app, you can view its configuration details from the My Apps page. The user ID shows up under Basic Information --> App Credentials --> App ID.
KARMABOT_SLACK_TOKEN The auth token for your bot. You can find the token from the My Apps page for your Karmabot under OAuth & Permissions --> Tokens for Your Workspace --> Bot User OAuth Access Token. It starts with
KARMABOT_SLACK_INVITE_USER_TOKEN An invite token to invite the bot to new channels. Bots cannot autojoin channels, but we implemented an invite procedure for this.
KARMABOT_DATABASE_URL The database url which should be compatible with SqlAlchemy. For the provided docker file use postgres://user42:pw42@localhost:5432/karmabot.
Note: To start the provided Docker-based Postgres server, be sure you have Docker Compose installed and run
docker-compose upfrom the karmabot directory.
- Note: To start the provided Docker-based Postgres server, be sure you have Docker Compose installed and run
KARMABOT_GENERAL_CHANNEL The channel id of your main channel slack
KARMABOT_ADMINS The slack user ids of the users that should have admin command access separated by commas.
If you do not want to use a file you have to provide environment variables with the above names. If no file is present we default to environment variables.
Development pattern for contributors
We use poetry and
pyproject.toml for managing packages, dependencies and some settings.
Setup virtual environment for development
You should follow the instructions to get poetry up and running for your system. We recommend to use a UNIX-based development system (Linux, Mac, WSL). After setting up poetry you can use
poetry install within the project folder to install all dependencies.
The poetry virtual environment should be available in the the project folder as
.venv folder as specified in
poetry.toml. This helps with
.venv detection in IDEs.
If you use the Anaconda Python distribution (strongly recommended for Windows users) and
conda create for your virtual environments, then you will not be able to use the
.venv environment created by poetry because it is not a conda environment. If you want to use
poetry disable poetry's behavior of creating a new virtual environment with the following command:
poetry config virtualenvs.create false. You can add
--local if you don't want to change this setting globally but only for the current project. See the poetry configuration docs for more details.
Now, when you run
poetry install, poetry will install all dependencies to your conda environment. You can verify this by running
pip freeze after
Testing and linting
For testing you need to install nox separately from the project venv created by poetry. For testing just use the
nox command within the project folder. You can run all the nox sessions separately if need, e.g.,
- only linting
nox -rs lint
- only testing
nox -rs tests
nox cannot be found, use
python -m nox instead.
For different sessions see the
nox.py file. You can run
nox --list to see a list of all available sessions.
Please make sure all tests and checks pass before opening pull requests!
Using nox under Windows and Linux (WSL)
Make sure to delete the
.nox folder when you switch from Windows to WSL and vice versa, because the environments are not compatible.
To ensure consistency you can use pre-commit.
pip install pre-commit and after cloning the karmabot repo run
pre-commit install within the project folder.
This will enable pre-commit hooks for checking before every commit.