131 lines
5.9 KiB
Markdown
131 lines
5.9 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/
|
|
- 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 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
|
|
|
|
* [ ] 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
|
|
|
|
* [ ] 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.
|
|
* [X] Fix progress bar
|
|
|
|
## 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.
|