Files
PointsBot/README.md

183 lines
7.3 KiB
Markdown
Raw Normal View History

2020-01-15 11:07:13 -08:00
# PointsBot
## Table of Contents
* [Description](#description)
* [Installation](#installation)
2020-01-15 22:48:32 -08:00
* [Configuration](#configuration)
2020-01-15 11:07:13 -08:00
* [Usage](#usage)
2020-01-15 22:54:05 -08:00
* [Terms of Use for a bot for Reddit](#terms-of-use-for-a-bot-for-reddit)
2020-01-15 11:07:13 -08:00
* [License](#license)
## Description
This is a bot for Reddit that monitors solutions to questions or problems in a
subreddit and awards points to the user responsible for the solution.
2020-02-01 00:23:15 -08:00
This bot was conceived as a response to
2020-01-15 11:07:13 -08:00
[this request](https://www.reddit.com/r/RequestABot/comments/emdeim/expert_level_bot_coding/).
The bot will award a point to a redditor when the OP of a submission includes
2020-01-15 18:05:08 -08:00
"!Solved" or "!solved" somewhere in a reply to the redditor's comment on that
submission. These points will allow the redditor to advance to different
2020-02-01 00:23:15 -08:00
levels.
2020-01-15 11:07:13 -08:00
At each level, the redditor's flair for the subreddit will be updated to reflect
their current level. However, the bot should not change a mod's flair.
Each time a point is awarded, the bot will reply to the solution comment to
notify the redditor of their total points, with a progress bar to show how many
points they need to reach the next level and a reminder of the title of the next
level.
2020-02-01 00:23:15 -08:00
In order to prevent the progress bar from being excessively long, some points
will be consolidated into stars instead. Right now, stars are hard-coded to
represent 100 points each, but this behavior may be configurable in the future.
2020-01-15 11:07:13 -08:00
The first time a point is awarded, the bot's reply comment will also include a
brief message detailing the points system.
Only the submission OP's first "!Solved" comment should result in a point being
2020-01-15 18:05:08 -08:00
awarded for each submission.
2020-01-15 11:07:13 -08:00
## Installation
Requirements:
2020-01-15 22:48:32 -08:00
* [Python 3](https://www.python.org/downloads/) (specifically version 3.7 or greater)
* pip (should be installed automatically with Python)
2020-01-15 18:05:08 -08:00
* [pipenv](https://pipenv.readthedocs.io/en/latest/)
2020-01-15 22:48:32 -08:00
* After installying Python & pip, install by running `pip install pipenv`
* For other installation options,
[see here](https://pipenv.readthedocs.io/en/latest/install/#installing-pipenv)
2020-01-15 18:05:08 -08:00
2020-01-15 22:48:32 -08:00
First, download this project using `git` or by downloading a ZIP archive from
the Github repository using the green `Clone or download` button. If ZIP, be
sure to extract the files from the archive before moving on.
2020-01-15 11:07:13 -08:00
2020-01-15 22:48:32 -08:00
To install the packages necessary for running the bot, navigate to the project
root directory and run `pipenv install`.
2020-01-15 11:07:13 -08:00
To uninstall (i.e. delete the project's virtual environment and the installed
2020-01-15 22:48:32 -08:00
python packages), navigate to the project root directory and instead run
`pipenv --rm`.
2020-01-15 11:07:13 -08:00
2020-01-15 22:48:32 -08:00
## Configuration
2020-01-15 11:07:13 -08:00
2020-01-15 22:48:32 -08:00
The bot can be configured by changing the values in the configuration files in
the project root directory:
2020-01-15 18:05:08 -08:00
* `praw.ini`
- Contains the account information for the bot
* `pointsbot.ini`
- Contains settings for bot behavior
2020-01-15 22:48:32 -08:00
You shouldn't have to worry about it, but if you need it, the syntax for the
config files can be found on the
[INI file format's Wikipedia page](https://en.wikipedia.org/wiki/INI_file).
If this is your first time running the bot, you will need to copy
`praw.sample.ini` to a new file called `praw.ini`, and likewise copy
`pointsbot.sample.ini` to a new file called `pointsbot.ini`. Any instances of
the word "REDACTED" should be replaced with the desired values; other values
should work as-is, but can be changed as desired.
The reason for this is that these config files (especially `praw.ini`) can
contain sensitive information, and maintaining only sample versions of these
files helps developers to avoid accidentally uploading that sensitive
information to a public (or even private) code repository.
### praw.ini
2020-01-15 23:12:21 -08:00
Several credentials are needed for running your bot, each of which is listed in
the `praw.ini` config file:
* `client_id`: Copy from your app preferences, as specified in the steps below.
* `client_secret`: Copy from your app preferences, as specified in the steps
below.
* `user-agent`: This field can be left as-is, thought if you'd like, you can
change it by following
[these guidelines](https://github.com/reddit-archive/reddit/wiki/API).
* `username`: The username for the bot account.
* `password`: The password for the bot account.
2020-01-15 22:48:32 -08:00
In order to make a bot, you must first have a bot account. This could be a
personal account, but it is wise to create a dedicate account for the bot,
especially one with the word "bot" somewhere in the name.
Once you have that, you can create a Reddit app for the bot. This is needed for
authenticating with Reddit.
1. First, go to your [app preferences](https://www.reddit.com/prefs/apps).
2. Select the "are you a developer? create an app..." button.
3. Provide a name for the bot, which could probably be the same as the account's
username.
4. Select the "script" radio button.
5. Provide a brief description.
6. For the "about url", you can provide a link to this Github repository:
https://github.com/cur33/PointsBot
7. Since it is unused, the "redirect uri" can be set to something like:
http://www.example.com/unused/redirect/uri
8. Select "create app".
Now you should be redirected to a page which contains the credentials you will
need; under the name of the bot is the unlabeled `client_id`, and below that
with the label "secret" is the `client_secret`.
If you have already done this in the past, the `client_id` and `client_secret`
can be found by navigating to your
[app preferences](https://www.reddit.com/prefs/apps) and selecting the "edit"
button for the app under the "developed applications" section.
### pointsbot.ini
For now, these settings are pretty straightforward.
The `Core` section:
* `subreddit_name`: The name of the subreddit to monitor
* `praw_site_name`: This should probably be left alone; it tells the bot which
credentials to use when authenticating with Reddit. It's useful for
development and easy testing with different accounts without having to
modify values in the code.
* `database_name`: This is the filepath to the SQLite database file, which ends
with the `.db` file extension.
The `Levels` section is used to determine the available user levels and
corresponding flair texts.
* The key on the left-hand side specifies the title and flair text for the
level; the case is ignored, and the text is converted to title case (first
letter of each word capitalized, and the rest lowercase).
* The value on the right-hand side of each line is the total number of points
required to reach that level.
The order of these lines doesn't matter; the bot will sort them in order of
point totals.
2020-01-16 14:44:47 -08:00
### Make the bot a mod in your subreddit
Some of the bot's behaviors, e.g. altering redditor flairs, require moderator
permissions. It should require just the "Flair" and "Posts" permissions, so you
don't need to grant it full permissions.
2020-01-15 22:48:32 -08:00
## Usage
2020-01-15 11:07:13 -08:00
The simplest way to run the bot is to navigate to the project root directory and
run:
```bash
pipenv run python -m pointsbot
```
2020-01-15 22:54:05 -08:00
## Terms of Use for a bot for Reddit
Since this is an open-source, unmonetized program, it should be considered
non-commercial, and is thus allowed to use the Reddit API without registration.
However, this bot is provided under the permissive MIT license. Therefore, if
your use of the bot becomes commercial, you should
[read the Reddit API terms and register here](https://www.reddit.com/wiki/api).
2020-01-15 11:07:13 -08:00
## License
2020-01-15 17:42:49 -08:00
Copyright ©2020 Collin U. Rapp. This repository is released under the MIT
license.