Files
PointsBot/docs/TODO.md
2020-02-07 21:31:52 -08:00

134 lines
6.1 KiB
Markdown

# TODO
## Current
## General
* [ ] Logging
* [ ] Testing
* [ ] GUI
- [ ] Create a GUI for configuring and running the bot, and performing other jobs
like adding or subtracting points for specific redditors
- [ ] Check for updates in the Github repo and prompt user to update
- Github API overview:
- https://developer.github.com/v3/
- https://developer.github.com/v4/
- It turns out that v4 might only be possible with a Github user
account to authenticate with the API.
- Useful links:
- https://developer.github.com/v3/repos/branches/#get-branch
- https://developer.github.com/v3/repos/contents/#get-archive-link
- https://developer.github.com/v3/repos/commits/
- https://developer.github.com/v3/repos/releases/
- https://developer.github.com/v3/#timezones
- Webhooks:
- https://developer.github.com/webhooks/
- https://developer.github.com/v3/repos/hooks/
- https://developer.github.com/v3/activity/events/types/#pushevent
* [ ] Determine whether and how to check "![Ss]olved" comments have been later
edited to remove the "![Ss]olved" string, and whether and how to remove or
reassign points
- If so, it could do that daily or something.
- This will be especially important if a "recovery mode" is implemented that
crawls through the whole subreddit to rebuild the database, since the
bot would only be able to see comments that haven't been removed, or
the newest version of edited comments.
- This could also just be encouraged through sub rules; e.g. "don't mark as
solved until you've actually tried the proposed solution"
* [ ] As mentioned in the previous section, implement a recovery mode
## File-Specific Tasks
### bot.py
* [ ] Allow mods to use "/[Ss]olved" in any context
* [ ] Allow mods and/or bot owner to add or remove points from specific users
* [ ] Make the algorithm for determining the problem solver more sophisticated
- e.g. check entire comment tree instead of just ignoring if the OP also
authored the parent comment
- Ask OP for clarification only if solver cannot be sufficiently determined
- Again, this behavior could also perhaps be better enforced through
subreddit rules rather than algorithmically
* [X] Allow mods to mark a post as solved with "/solved"
* [X] When replying to solution, the bot should...
- [X] Reply to the comment containing the "![Ss]olved" string
- [X] Tag the solver so they will be notified
- ~~Delete the automod message~~
* ~~Add a star to the user flair for every 100 points~~
* ~~Add a way to look up user points~~
- i.e. summon bot by tagging it and provide a username to look up
- the bot will reply with the last message that the user received
### config.py
* [ ] Switch from `toml` package to `tomlkit` package
- Preserves style, comments, etc.
* [X] Change from `ini` to `toml `
* [X] Consolidate `pointsbot.ini` and `praw.ini` into a single config file.
* [X] Add option for flair_template_id
* [X] Check for config file in a well-known location, e.g. `~` directory
- Probably named `~/.pointsbot` or something similar
- Could do something similar to packages like PRAW:
1. Look in current working directory first.
2. Look in OS-dependent location next.
3. (Maybe) Finally, could look in the directory containing the source files
(using `__file__`).
* [X] Add interactive config scipt
* ~~Fix titlecase problem with roman numerals~~
- Only an issue with `ini` format
* ~~Separate the development-handy config items into separate section~~
- Don't really have any right now
### database.py
* [ ] Store date for each "!solved" comment
* [ ] Possibly refactor for a datastore type thing instead of database
- Maybe even make models like Redditor to combine data storage/access with
logic, e.g. determining current level
### reply.py
* [X] Fix progress bar
* ~~For the footer section of the reply comment regarding the bot, could have the
bot make a post on its account explaining itself, and link to that (and then
also link to the source code separately, and perhaps in that post, too).
Could even have the bot make this post automatically if it doesn't have a
link to the post in its config, and then store the link for future use.~~
## Ideas
### Config
### Database
* Should it keep track of the solved posts for future reference and calculate
points on the fly, rather than just keeping track of points? If so, should
have a column denoting whether the post has been deleted, if that
information is decided to be useful when determining a user's points.
### Determining when to award points
To ensure that points are only awarded for the first comment marked as a
solution:
* Alter the database to allow for tracking of each submission and the first
comment marked as the solution. Then, everytime a new solution comment is
detected, simply check the database to see if the submission is already
counted. This will avoid unnecessary calls to Reddit, which would include
scanning all the submission comments each time.
* This approach could also make it simpler to check whether a solution comment
has been edited. Instead of having to do a daily search for edits, it could
just check the original solution comment to ensure that it still contains
the "!solved" string. If not, it can remove points from that author and
award points to the new author.
To ensure that a point is awarded to the correct user:
* We could expand the "!solved" bot summons to include an optional username
argument. Without the argument, the bot will award the point to either the
top-level comment or the parent comment of the "!solved" comment, whichever
is decided upon. However, if the username argument is provided, the bot
could simple check that one of the comments in the comment tree belongs to
that user, and then award them the point.
- Honestly, this is probably overcomplicated and unnecessary, though.