OSCR¶
Overview¶
Warning
Use of this bot has been known to cause the ToR-Stats Discord bot to freeze, should you have the bad luck to delete a comment while it is being processed. Use at your own risk.
This is an unofficial program. It is not officially endorsed by the Transcribers of Reddit or the Grafeas Group; they are in no way involved with or liable for this program or any matters relating to it. It is developed unofficially, in my capacity as a volunteer, NOT a moderator.
The Open Source Caretaker for Reddit, abbreviated OSCR and nicknamed Oscar, is a program that removes blacklisted comments from a user’s Reddit profile once the comment is older than a cutoff time. It is designed with r/TranscribersOfReddit volunteers in mind, thus the contents of the default blacklist and other certain functionalities that help limit it to this use.
If set to recur, the program will delete new blacklisted comments periodically as they move past the cutoff time.
Copyright¶
Copyright (C) 2020-present, Murdo B. Maclachlan
OSCR program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
OSCR is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should receive a copy of the GNU General Public License when you install OSCR. If not, see https://www.gnu.org/licenses/.
For help, contact me at murdomaclachlan@duck.com
Credits¶
The following is a list of people who were helpful in creating this project. The list is in alphabetical order.
u/–B_L_A_N_K–¶
Real-time deletion
Improved output formatting
Help with Windows compatibility
CDR, a similar program to OSCR.
u/DasherPack¶
Being a handsome boi
u/Metaquarx¶
Help with regex support
u/MurdoMaclachlan¶
Original creator and primary maintainer
u/Tim3303¶
Help with default regex list
Installation and Use¶
Note
OSCR was created on Linux and, given the developer has no access to other operating systems, support for Windows is limited and there is no support for MacOS.
Requirements¶
In order to install OSCR, you will need a version of Python installed. The original framework was written in 3.7, and current development uses 3.10, but anything 3.5 onwards should work. A minimum of 3.5 is required because that is when type-hinting, which OSCR uses extensively, was added.
OSCR also relies on several python packages; configparser, PRAW, and alive_progress. Any version of configparser will do, but for PRAW you will need at least 7.1.2, and for alive_progress you will need at least 1.6.1.
Installation¶
To install OSCR,
Run either
python -m pip install oscr
orpip install oscr
in your command line. It should automatically install the program as well as any dependencies.Before doing anything else, you should now create an app for your Reddit account. You can do this by going to the apps page in preferences and creating a new app:
Give it a name (“Oscar” or “OSCR” are easy to remember).
Choose “script”.
Give it a description (which can really be anything you want).
Set an about url and redirect uri. The about url doesn’t matter (I just linked the project’s repository). If you have two-factor authentication enabled, set the redirect uri to
http://localhost:8080/users/auth/reddit/callback
. If you do not have 2FA enabled, the redirect uri does not matter.
If you are not using two-factor authentication, you can skip this step. If you are, then in your console, run the command
oscr -S
; you will be taken to the settings menu. Select “Edit config” and then “useRefreshTokens”. Set the value to “True”. You can then select “Continue to program” in place of runningoscr
in the next step.Now, in your console, run the command
oscr
and you will be prompted to enter information for the creation of the praw.ini file. It will ask for your client id and client secret, which you can see on the apps page.Go to the page and scroll down until you find the bot you created. Underneath its name should be “personal use script”, and below that a string of random characters. This is your client id. If you can’t see a field labeled “secret” with another, longer string of random characters after it, then click the edit button and it should appear (along with other fields you filled out when you were creating the app).
For those using 2FA, OSCR will automatically set your redirect_uri to
http://localhost:8080/users/auth/reddit/callback
, which should be what you set it to for the app in step 2.
Once the ini has been created, OSCR will detect whether or not you are using 2FA. If you are, it will open a tab in your browser for you to authorise it to read your submission history and edit your submissions - the necessary scopes to delete comments. Once fully initialised, the contents of your praw.ini file should look something like this (the last one will only appear if you have 2FA enabled)::
[oscr]
client_id=lI3fAkE7x82LiE
client_secret=4lS0f4Ke1234567894NdN0tR3aL
username=testuser
password=yourpasswordhere
redirect_uri=http://localhost:8080/users/auth/reddit/callback
refresh_token=yourrefreshtokenhere
You can check if they are correct by navigating to your config folder, which should be .config on Linux and Mac, and AppData on Windows.
Once you’ve rerun the program, each comment older than the cutoff should be deleted. By default, it will search every 10 minutes, and you can then either leave the program running in the background to delete posts in real time as they reach the cutoff, or you can turn recur off in your config file and manually run it whenever you want to delete comments.
Updating¶
To update the program to a newer version, run python -m pip install --upgrade oscr
or pip install --upgrade oscr
in your command line.
Using the Latest Testing Version¶
To use the latest testing version, download the 2.x branch files, extract the archive you have downloaded, and use pip install .
after navigating into the directory the files were extracted to.
Configuration¶
Once properly intialised, there should be a config.json
file in the following directory: [your home folder]/.oscr
. Its contents will look like this:
{
"config": [
{
"blacklist": [
"claim",
"claiming",
"claim -- this was a automated action. please contact me with any questions.",
"dibs",
"done",
"done -- this was a automated action. please contact me with any questions.",
"unclaim",
"unclaiming",
"unclaim -- this was a automated action. please contact me with any questions."
],
"case_sensitive": False,
"cutoff": 1,
"cutoff_unit": 3600,
"debug": False,
"limit": 100,
"log_updates": True,
"os": "[Your OS here]",
"print_logs": True,
"recur": True,
"regex_blacklist": [
"^(claim|done|dibs|unclaim)(?!(.|\n)*(treasure[\s-]*hunt|save))"
],
"report_totals": True,
"subreddit_list": [
"transcribersofreddit"
],
"unit": [
"minute",
"minutes",
60
],
"use_refresh_tokens": False,
"use_regex": False,
"user_list": [
"transcribersofreddit"
],
"wait": 10
}
]
}
The following is an explanation of what each configuration option does:
Name |
Type |
Description |
---|---|---|
blacklist |
Array |
The list of comments OSCR will delete. It is not case sensitive, so comments of varying capitalisation will all be deleted, however they will only be deleted if the entire content of the comment matches one of the entries in the blacklist. |
case_sensitive |
Boolean |
When using the blacklist, this value determines whether or not the program is case sensitive in its search for comments. Not applicable when using regexes. |
cutoff |
Integer |
The number of units of time old a comment must be before it will be deleted. This is set to 1 by default. I would recommend a minimum cutoff of 15 minutes, in case the u/transcribersofreddit bot has lag and doesn’t register your comment in time. |
cutoff_unit |
Integer |
The unit of time used for the cutoff, converted into seconds. Set to 3600 (1 hour) by default. |
debug |
Boolean |
If set to True, OSCR will log obsolete comments, but not actually delete them. Set to False by default. |
limit |
Integer |
The number of comments the program will check through on your profile; i.e. how far back it will go. This is set to 100 by default and can go to a maximum of 1000 (converted to None by the program), due to Reddit’s API limits. |
log_updates |
Boolean |
Determines whether or not OSCR will write the log to a file. Set to true by default. |
os |
String |
Your operating system. Can be left blank. |
printLogs |
Boolean |
Determines whether or not OSCR will print log output to the console. Set to true by default. |
recur |
Boolean |
Determines whether the program will run through only once (if False), or continue re-checking your profile in regular intervals until you exit (if True). It is set to True by default. The length of time between program iterations is determined by the wait variable. |
regex_blacklist |
Array |
An alternative blacklist intended for use with regexes. Users not familiar with regexes are advised to ignore this list, as regexes are turned off by default and can cause harm to your profile if used without care. |
report_totals |
Boolean |
Determines whether or not OSCR will print total statistics to the log and console output. Set to True by default. |
subreddit_list |
Array |
The list of subreddits that OSCR cares about. Comments that are in the blacklist or match your set regexes but are not on one of these subreddits will be ignored. If the list is empty, OSCR will check comments on all subreddits. |
unit |
Array |
A list containing all the variations on the unit of time used for the wait variable; singular word, plural word, and integer equivalent converted into seconds. The default unit is minutes. |
use_refresh_tokens |
Boolean |
Determines whether or not OSCR should authenticate using refresh tokens; enable this if you are using two-factor authentication. |
use_regex |
Boolean |
Determines whether OSCR should use the blacklist key, only deleting comments that exactly match it, or the regexBlacklist key, which allows for more flexible and powerful control over what the programs delete. It is set to False by default, and users not familiar with regexes should leave it this way, as getting your regex wrong can result in OSCR deleting a lot more than you intend. |
user_list |
Array |
The list of users that OSCR cares about. Comments that are in the blacklist or match your set regexes but are not in reply to one of these users will be ignored. If the list is empty, OSCR will check comments regardless of whom they are in reply to. |
wait |
Integer |
The number of units of time (unit being determined by the unit variable) OSCr will wait before re-checking your comments. It is set to 10 by default. |
You can edit the config.json and praw.ini files from within OSCR by running oscr --settings
or oscr -S
.
Runtime Arguments¶
OSCR presents a number of runtime arguments that can be passed in order to give the user more power over the way they run the program and provide certain unique functionalities. The arguments are as follows:
Name |
Description |
Priority |
---|---|---|
|
Runs an isolated instance of OSCR that only deletes comments that contain the phrase “treasure hunt” preceded by “claim” or “done”. |
7 |
|
Lists everyone who has helped with the creation of the program. |
3 |
|
Forces OSCR to enable regex for one instance regardless of ‘use_regex’ configuration. |
7 |
|
Displays the list of runtime arguments in the console. |
1 |
|
Forces OSCR to run only one cycle regardless of ‘recur’ configration. |
7 |
|
Forces OSCR to print logs for one instance regardless of ‘print_logs’ configuration. |
7 |
|
Resets the config file to defaults. |
5 |
|
Forces OSCR to report total statistics for one instance regardless of ‘report_totals’ configuration. |
7 |
|
Runs the settings menu. |
6 |
|
Displays the contents of the config file. |
4 |
|
Displays the currently installed version. |
2 |
The priority of each argument refers to how OSCR prioritises which ones to run, if there are any conflicting arguments passed. A lower number means higher priority. For example, if both --version
and --credits
are passed, --version
will process first because it is higher priority. Similarly, if both --help
and --print-logs
are passed, --print-logs
will have no effect, as --help
is a “closing argument”, meaning it stops the main program from running.
The lowest priority is 7; these are all arguments that affect the main program and will not have an effect if they are accompanied by any closing arguments. They are processed in alphabetical order.
An example command to run OSCR would be as follows:
oscr --no-recur --print-logs --report-totals
,oscr -n -p -r
.Additional Help and FAQ¶
/home/your_username/.oscr/
, with the data (log and statistics) under the subfolder data
. On Windows, they are stored under C:\Users\your_username\AppData\Roaming\oscr
, with the data under a data
subfolder.oscr
subfolder prevents OSCR from overwriting any ini you might already have, and the program is designed to only pull from that file..config
, run oscr -F
and it should automatically move the oscr
section from your .config
praw.ini to .config/oscr
, but note that this functionality was removed in version 2.1.0.murdomaclachlan@duck.com
. You can also open an issue on GitHub if needed.Changelogs¶
A list of changelogs for OSCR, with the most recent version first. These are also available here.
Unreleased¶
2.2.0¶
Functionality
Change default regex to allow saving of a claim/done comment. (#161, #162)
Make
Globals.config
use proper encapsulation. (#151, #175)
Cleanup/Optimisation
Blacken all modules. (#152)
Divide
globals.py
into two modules;classes.py
, containing all classes, andglobalspy
, containing all global variables. (#153, #168)
Documentation
Change function/variable naming from camelCase to snake_case. (#154, #160)
Change config keys from camelCase to snake_case. (#168, #169, #176)
Add docstrings to all modules. (#155, #158)
Rename
ini.py
tocreds.py
. (#156, #168)
Bug Fixes
Fix crash due to misnamed attribute on
fetch_stats()
failing to findstats.json
. (#157, #160)Fix refresh token not being properly saved to
praw.ini
. (#163, #170)Fix possible reference before assignment if
praw.ini
is not found inedit_credentials()
. (#164, #171)Fix crash when editing arrays in
edit_config()
due to old variable naming references. (#165, #172)Change default argument for
update_log()
toNone
. (#166, #173)Fix unfilled argument when calling
dump_credentials()
inedit_credentials()
. (#167, #174)
2.1.1¶
Bug Fixes
Fixed a crash when using regexes due to a type mismatch in the
checkRegex()
method.Fixed a crash on attempting to handle AttributeErrors in comment checking due to not specifying a dataset to call from.
Fixed a crash on attempting to dumpStats due to an attribute naming mismatch.
2.1.0¶
Functionality
Added refresh token support. (#33, #139)
Added “dibs” to the default blacklist and regexBlacklist. (#140, #141)
Removed
--format-old
runtime argument. (#105, #131)
Cleanup/Optimisation
Deferred various functionalities in
main.py
to functions in other modules. (#128, #145)Optimised the settings menu to allow for easier addition of new config and ini options. (#127, #139, #142)
Combined
Log.clear()
andLog.get()
intoLog.request()
. (#125, #130)Other general cleanup, readability and optimisation improvements. (#136, #137, #139, #142, #145)
Documentation/Logs
Changed “core” folder to “oscrcore” to avoid issues with pip. (#138, #139)
Bug Fixes
Fixed a crash on calling
resetConfig()
. (#132, #134)Fixed a crash on passing an unknown run-time argument. (#133, #135)
2.0.0¶
Functionality
Added
--clean-hunt
runtime argument to remove comments containing “treasure hunt”. (#48, #87, #115)Added caseSensitive config key. Determines whether or not OSCR is case sensitive when matching regexes or blacklisted comments. Set to False by default. (#57, #69)
Added printLogs config key and
--print-logs
runtime argument to override the config. Determines whether or not OSCR prints the log to the console. (#70, #71)Added reportTotals config key and
--report-totals
runtime argument to override the config. Determines whether or not OSCR prints total statistics to the console. (#65, #72)Added “unclaiming” to the default blacklist. (#69, nice)
OSCR now ignores punctuation when matching comments to blacklist entries. (#80, #83)
Added userList config key. If any users are specified in the list, OSCR will only check comments that are in reply to those users. (#85, #87)
Added ability to leave subredditList (and new userList key) empty, which will disable them, letting OSCR check comments on any subreddit or in reply to any user.
OSCR now collects global variables at program initialisation (in the
oscr
script) and notmain.py
. (#49, #75)Contained all code in
main.py
within anoscr()
function for the purpose of the above change. (#50, #75)
Cleanup/Optimisation
Refactored entire program with a much stronger object-oriented focus. This opens the door for a lot of backend improvements and optimisation. (#108, #109)
Re-wrote stats handling to use JSON and classes, making
statistics.py
a much neater module. (#106, #109)Moved arguments checking to its own module,
arguments.py
. (#52, #75)Moved comment handling to its own module,
comment.py
. (#81, #82)Added type hinting. (#101, #103)
Staticised constant variables. (#97, #96, #98)
Optimised generation of
config.json
andpraw.ini
. (#51, #66, #67)Optimised handling of
praw.ini
, including updating & formatting from CDRemover to OSCR. (#76, #84)calculateEssentials()
is no longer called unnecessarily. (#53, #59)Combined default regexBlacklist items into one regex. (#117, #118)
Moved the default config variable to
globals.py
. (#56, #66)Made many miscellaneous optimisation and readability improvements. (#77, #78, #79, #84, #96, #104, #109, #112, #114, #118, #120, #121)
Dependencies
Added colored for coloured console output. (#94)
Updated Python requirement to >= 3.5 for type hinting. (#107)
Documentation/Logs
Moved documentation to readthedocs. (#93, #99)
Renamed
oscrmodules
tocore
. (#110, #111)Moved
config.json
to~/.config/oscr
on Linux and Mac, andAppData\\Roaming\\oscr
on Windows. (#54, #64)Changed how
praw.ini
is read and moved file to~/.config/oscr
on Linux and Mac, andAppData\\Roaming\\oscr
on Windows. (#55, #84)Improved log output surrounding comment retrieval & checking. (#60, #68)
Added license specification to
setup.py
. (#73, #74)Changed config guide from bullet point list to table. (#83)
Added colouring to logs, currently only on warnings. (#91, #94)
Generally improved log handling. (#95, #96)
Renamed
gvars
toGlobals
. (#100, #102)
Bug Fixes
Fixed a crash on attempting to use
--show-config
due to accidentally assigningGlobals()
instance togvars.config
. (#45, #58)Fixed an infinite loop on attempting to update integer or boolean keys in the settings menu. (#61 #63)
Fxied regexes sometimes deleting comments that are not bot interactions. (#86, #87)
Fixed run-time arguments not being processed in the correct priority order. (#88, #90)
Fixed a crash on passing conflicting run-time arguments. (#89, #90)
Fixed a potential crash on failing to update a statistic. (#92, #94)
1.2.1¶
Functionality
Added
--version
run-time option to print the currently installed version to the console.
Cleanup/Optimisation
Minor optimisation improvements in log.py, misc.py and statistics.py.
update() now uses smaller None-type instead of needlessly initialising an empty array.
Removed debug time.sleep() statement from comment checker.
Dependencies
praw; require >= 7.1.2.
alive_progress; require >= 1.6.1.
Documentation/Logs
Removed credits from start of main.py.
Bug Fixes
#16: Recursion error on initialising Reddit instance with empty Redditor. (fixed upstream in PRAW 7.1.1)
1.2.0¶
Functionality
Added support for regexes (thanks to /u/metaquarx and /u/Tim3303 for helping with this).
Added regex config key that tells the program whether or not to check comments using regexes, by default set to False.
Added regexBlacklist config key, to contain the regexes to check comments against, by default excludes anything with “treasure hunt”.
Added new subredditList config key, containing a whitelist of subreddits the program is allowed to search through; contains only “transcribersofreddit” by default.
Removed torOnly config key as of above change.
Added a ‘-e’ option to the settings menu, allowing users to escape to the main menu if they accidentally chose the incorrect key.
Added a
--show-config
run-time option to print the contents of the config file to the console.Added a
--credits
run-time option to print the credits to the console.
Cleanup/Optimisation
Condensed comment search function thanks to new subredditList config key.
Removed unnecessary failedStats check in fetch().
Changed initialiseGlobals() to no longer unnecessarily pass empty lists..
Removed unused import.
Removed python3 env in main.py.
Readibility improvements in settings.py.
Dependencies
alive_progress; added.
Documentation/Logs
Added a progress bar to console output (not saved to log file).
Added a “How to use this menu” option to the settings menu.
Clarified log messages for when OSCR counts less comments than the set limit.
Added a log message to
--format-cdr
to indicate when praw.ini is already formatted to OSCR.When encountering a JSONDecodeError in getConfig(), OSCR now logs what the error was.
Added copyright notices to the beginnings of all files except setup.py and __init__.py
Added a note giving a minimum recommended cutoff of 15 minutes.
Corrected a spelling error in README.md.
Moved credits from main.py to CREDITS.md.
Bug Fixes
Fixed int and boolean based keys not being updated by the settings menu.
1.1.1¶
Cleanup/Optimisation
Removed lingering debug print() statement.
Documentation/Logs
Added copyright notices; one at the beginning of the code in the oscr script file, and one to be printed to the console when OSCR is run.
Added repository badges/information to README.md
Bug Fixes
Fixed #34: Crash caused by comparing None to int() after settings module output None-type to “limit” in config.json.
Fixed #35: Converts all numerical limits to None-type.
Fixed #36: Misleading logs could suggest a bug if available comments are less than the user’s limit.
1.1.0¶
Meta
Renamed project from ClaimDoneRemover (CDR) to Open Source Caretaker for Reddit (OSCR), new PyPi project at: https://pypi.org/project/oscr/
Functionality
Added a settings menu from which you can edit config.json and praw.ini
- Added several run-time arguments;
--format-cdr
renames .cdremover and [cdrcredentials] to .oscr and [oscr], respectively,--help
displays a list of commands,--no-recur
forces the program to run only one cycle regardless of ‘recur’ configuration,--reset-config
resets the config file to defaults,--settings
runs the settings menu.
OSCR will now stop attempting to update each statistic after a failure to do so.
OSCR now defaults non-numeric instances of config[“limit”] to None type
Global variables are now contained in gvars class, passed into all necessary functions.
config is now a global variable.
Cleanup/Optimisation
Switched from .format() to fstrings for more succinct string formatting.
Squashed some code verbosity; unnecessary variable declarations, if statements with longer conditions than neeeded, etc.
Removed unnecessary imports.
fetch() and update() no longer unnecessarily globalise variables.
Documentation/Logs
Replaced the Notes section in README.md with a more informative Additional Help and FAQ section.
Corrected minor spelling errors in log output and commenting.
Avoided potential double timestamp in log noting failure to decode config.json.
createIni() now logs its attempts to create praw.ini
Bug Fixes
#26: New “deleted” lines are appended to stats.txt rather than just updating one line as was intended.
#27: Potential error with displaying log message in the format “X/None comments checked successfully”.
#28: Potential error with displaying log message in the format “X/Y comments checked successfully” where X is greater than Y.
#29: Incorrect INI Path for Windows (thanks to /u/–B_L_A_N_K–)
#31: Program crash on attempting to fetch config.json if the parent directory is missing (see note 6).
#32: Potential crash if config[‘logUpdates’] configuration was set to false.
1.0.0¶
Meta
Created PyPi package for the project, link at: https://pypi.org/project/cdremover/1.0.0/
Functionality
Program is now run through cdremover script (can be used a console command if installed through pip).
Program now creates praw.ini if it cannot be found (fix for #23).
Added new cutoffUnit config variable, which is the unit of time the cutoff is measured in converted to seconds.
Program now resets any search limit value greater than or equal to 1000 to “None”, rather than allowing values greater than 1000 to go unchanged, which could have potentially caused issues with Reddit’s API.
Made home, log and version variables global throughout all files and functions.
Cleanup/Optimisation
Renamed libcdr module cdrmodules; included main.py.
Optimisation improvements for both increased speed and reduced file size.
Dependencies
Moved dependencies from requirements.txt to setup.py so pip will auto-install them.
Added configparser to dependencies.
Documentation/Logs
Moved log and statistics to ~/.cdremover/data.
Moved config.json to ~/.cdremover.
- Program now logs the following;
every time it intentionally exits,
output related to praw.ini handling,
a check for each 25 comments successfully checked.
Clarified ambiguity in some log messages.
misc.py functions now log console output.
Re-wrote README.md to faciliate new installation instructions and other information.
Began recording release candidate versions during development.
Added/clarified some commenting.
Bug Fixes
#23: Crash if praw.ini is missing or exists without “cdrcredentials” section.
#24: Crash due to getTime() being declared after the import of a function that attempts to import it.
0.4.5¶
Cleanup/Optimisation
Moved updateLog() from main.py to log.py.
Moved getDate() from main.py to misc.py.
Documentation/Logs
Program now gives meaningful log on failure to decode config.json.
Program now logs what version it is being run with.
0.4.4¶
Functionality
Program now creates a config file using default settings if one is not present. (fixes #18)
Now passes logUpdates variable through every attempt to update the log. (fixes #20)
Changed default cutoff to 1 hour.
Documentation/Logs
Changed to .json config file.
Bug Fixes
#18: New version downloads may overwrite config files.
#20: Failing to update the log results in a crash.
0.4.3¶
Functionality
Added “torOnly” configuration, to give the user the option to limit the bot to only detect comments from r/transcribersofreddit. Set to True by default.
Added “claiming” to the default blacklist.
Program is no longer case sensitive (i.e. dones and claims containing uppercase letters will still be deleted).
Documentation/Logs
Program now logs upon finding a blacklisted comment that is not past the cutoff (i.e. “Waiting for ‘x comment’.”).
0.4.2¶
Functionality
Added automated “unclaim” to the default blacklist.
0.4.1¶
Bug Fixes
#17: TypeError on attempting to delete comment.
0.4.0¶
Cleanup/Optimisation
Restructured libcdr library.
Improved coding and variable names in a few areas.
Improved error management (part of #14 fix).
Documentation/Logs
Restructured console output and log.
Added timestamps to console output and log
Added basic commenting.
Bug Fixes
#14: Updates log twice per iteration, almost doubling log.txt file.
0.3.1¶
Functionality
Program now auto-creates log.txt if it is absent (part of #11 fix).
Bug Fixes
#11: Program crashes if data folder is absent.
Corrected a mistake in the blacklist causing automated done not to be deleted.
0.3.0¶
Functionatity
Added ability to configure whether the program keeps refreshing or only runs through once; recur set to True by default.
Added automated done/claim to the default blacklist.
Cleanup/Optimisation
Improved readability in some places, especially config.py.
Documentation/Logs
Data folder is now absent in initial download (part of #9 fix).
Added note that putting your OS in config.py is optional, and only there for the user_agent header.
Added a long-needed credit.
Bug Fixes
Fixed #8: Program crashes if no stats.txt file is found.
Fixed #9: Updates could overwrite old statistics and logs with empty files.
0.2.1¶
Documentation/Logs
Changed output formatting to inline for “Updating log…”
Added notice that the bot is non-official
0.2.0¶
Functionality
Added configuration options for limit, wait, and unit; set to 100, 10 and minutes by default.
Added configuration options for the log; set to True by default.
Added “unclaim” to the default blacklist.
Cleanup/Optimisation
Removed unused “import datetime” from main.py.
Documentation/Logs
Added a counter to show more detailed real-time output.
Added a system that logs the console to a .txt file if turned on
Added a system to save the total statistics for the counter.
Bug Fixes
Fixed #1: Does not continually delete comments as they reach cutoff.
0.1.0¶
Functionality
Initial program created.