aboutsummaryrefslogtreecommitdiffstats
Commit message (Collapse)AuthorAgeLines
...
| | | * | | | | | | | | | | | | ModManagement: display ID of edited infraction in confirmation messageGravatar MarkKoz2019-12-11-1/+2
| | | | | | | | | | | | | | | |
| | | * | | | | | | | | | | | | ModManagement: allow "recent" as ID to edit infraction (#624)Gravatar MarkKoz2019-12-11-2/+21
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | It will attempt to find the most recent infraction authored by the invoker of the edit command.
| | | * | | | | | | | | | | | | Add a generic converter for only allowing certain string valuesGravatar MarkKoz2019-12-11-13/+23
| | | | |_|_|/ / / / / / / / / | | | |/| | | | | | | | | | |
| | | | * | | | | | | | | | | Apply suggestions from Mark - removing `.` at the end and use double quote ↵Gravatar Shirayuki Nekomata2019-12-04-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | instead of single. Co-Authored-By: Mark <[email protected]>
| | | | * | | | | | | | | | | Implemented remaining time until expiration for infraction searching.Gravatar Shirayuki Nekomata2019-12-04-0/+7
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Will show the remaining time, `Expired.` or `Inactive.` based on the status of the infraction ( It can be inactive but not expired, like an early unmute )
| | | | * | | | | | | | | | | Created `until_expiration` to get the remaining time until the infraction ↵Gravatar Shirayuki Nekomata2019-12-04-0/+20
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | expires.
| | | | * | | | | | | | | | | Improved type hinting for `format_infraction_with_duration`Gravatar Shirayuki Nekomata2019-12-04-1/+5
| | | | | |/ / / / / / / / / | | | | |/| | | | | | | | |
| | | | | * | | | | | | | | Reddit: raise ClientError when the token can't be retrievedGravatar MarkKoz2019-12-11-4/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Raising an exception allows the error handler to display a message to the user if the failure happened from a command invocation.
| | | | | * | | | | | | | | Reddit: log retries when getting the access tokenGravatar MarkKoz2019-12-11-1/+9
| | | | | | | | | | | | | |
| | | | | * | | | | | | | | Reddit: create a dict constant for the User-Agent headerGravatar MarkKoz2019-12-11-27/+12
| | | | | | | | | | | | | |
| | | | | * | | | | | | | | Reddit: revise docstringsGravatar MarkKoz2019-12-11-9/+17
| | | | | | | | | | | | | |
| | | | | * | | | | | | | | Reddit: define AccessToken type at the module levelGravatar MarkKoz2019-12-11-1/+2
| | | | | | | | | | | | | |
| | | | | * | | | | | | | | Reddit: use expires_in from the response to calculate token expirationGravatar MarkKoz2019-12-11-2/+3
| | | | | | | | | | | | | |
| | | | | * | | | | | | | | Reddit: use qualified_name attribute when removing the cogGravatar MarkKoz2019-12-11-1/+1
| | | | | | | | | | | | | |
| | | | | * | | | | | | | | Reddit: move BasicAuth instantiation to __init__Gravatar MarkKoz2019-12-11-4/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The object is basically just a namedtuple so there's no need to re-create it every time a token is obtained. * Remove log message which shows credentials. * Initialise headers attribute to None in __init__.
| | | | | * | | | | | | | | Reddit: move token renewal inside fetch_postsGravatar MarkKoz2019-12-11-17/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This removes the duplicate code for renewing the token. Since fetch_posts is the only place where the token gets used, it can just be refreshed there directly.
| | | | | * | | | | | | | | Merge branch 'master' into reddit-api-oauthGravatar Jens2019-12-05-1198/+3100
| | | | | |\ \ \ \ \ \ \ \ \
| | | | | * | | | | | | | | | Keeps access token alive, only revokes it on extension unload.Gravatar Jens2019-12-05-20/+32
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Hard-coded version number to 1.0.0.
| | | | | * | | | | | | | | | Fix linting errorGravatar Jens2019-10-26-0/+1
| | | | | | | | | | | | | | |
| | | | | * | | | | | | | | | Resolved merge conflicts.Gravatar Jens2019-10-26-1605/+2753
| | | | | |\ \ \ \ \ \ \ \ \ \ | | | | | | | |_|_|/ / / / / / | | | | | | |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Add retry loop to token request. Revoke access token after usage.
| | | | | * | | | | | | | | | Add reddit environment variable, change User-Agent and fix lint problemGravatar Jens2019-10-22-2/+4
| | | | | | | | | | | | | | |
| | | | | * | | | | | | | | | Merge branch 'master' of https://github.com/python-discord/bot into ↵Gravatar Jens2019-10-16-92/+291
| | | | | |\ \ \ \ \ \ \ \ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | reddit-api-oauth
| | | | | * \ \ \ \ \ \ \ \ \ \ Resolve merge conflictGravatar Jens2019-10-15-4/+2
| | | | | |\ \ \ \ \ \ \ \ \ \ \
| | | | | | * | | | | | | | | | | Add Reddit OAuth tasks and refactor codeGravatar Jens2019-10-09-6/+77
| | | | | | | |_|_|_|_|_|_|_|_|/ | | | | | | |/| | | | | | | | |
| | | | | * | | | | | | | | | | Unload cog on auth error and fix linting warningsGravatar Jens2019-10-15-19/+16
| | | | | | | | | | | | | | | |
| | | | | * | | | | | | | | | | Add Reddit OAuth tasks and refactor codeGravatar Jens2019-10-14-6/+76
| | | | | | | | | | | | | | | |
| | | | | | | | | | * | | | | | Specify assertion to be a tuple comparisonGravatar kwzrd2019-11-14-1/+1
| | | | | | | | | | | | | | | |
| | | | | | | | | | * | | | | | Make complex test cases namedtuples, recognize between various authors, pass ↵Gravatar kwzrd2019-11-14-12/+43
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | config to subTest
| | | | | | | | | | * | | | | | Hold recent_messages in a list to respect type hint, set config in setUpGravatar kwzrd2019-11-14-5/+8
| | | | | | | | | | | | | | | |
| | | | | | | | | | * | | | | | Adjust attachments rule unit test to correcty build the arguments for the ↵Gravatar kwzrd2019-11-14-7/+11
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | tested rule
| | | | | | | | | | * | | | | | Fix bug in attachments rule where last_message could potentially count twice ↵Gravatar kwzrd2019-11-14-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | in the sum of attachments
| | | | | | | | | | * | | | | | Use async_test helper to simplify coro testingGravatar kwzrd2019-11-13-9/+14
| | | | | | | | | | | | | | | |
| | | | | | | | | | * | | | | | Adjust attachments rule to use MockMessage, restructure test casesGravatar kwzrd2019-11-13-20/+23
| | | | | | | | | | | | | | | |
| | | | | | | | | | * | | | | | Adjust links rule to use proper MockMessageGravatar kwzrd2019-11-13-14/+10
| | | | | | | | | | | | | | | |
| | | | | | | | | | * | | | | | Merge branch 'master' into unittest-mentionsGravatar kwzrd2019-11-13-179/+187
| | | | | | | | | | |\ \ \ \ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Testing methodology was adjusted in upstream repo. Merging the relevant changes.
| | | | | | | | | | * | | | | | | Adjust incorrect type hintGravatar kwzrd2019-11-09-1/+1
| | | | | | | | | | | | | | | | |
| | | | | | | | | | * | | | | | | Use MockMessage instead of custom FakeMessageGravatar kwzrd2019-11-09-15/+11
| | | | | | | | | | | | | | | | |
| | | | | | | | | | * | | | | | | Adjust type hint to correctly represent internal typeGravatar kwzrd2019-11-09-1/+1
| | | | | | | | | | | | | | | | |
| | | | | | | | | | * | | | | | | Use range to build mock mentions listGravatar kwzrd2019-11-09-1/+1
| | | | | | | | | | | | | | | | |
| | | | | | | | | | * | | | | | | Adjust docstring asterisk to backtick for consistencyGravatar kwzrd2019-11-09-1/+1
| | | | | | | | | | | | | | | | |
| | | | | | | | | | * | | | | | | Add missing docstringGravatar kwzrd2019-11-09-0/+1
| | | | | | | | | | | | | | | | |
| | | | | | | | | | * | | | | | | Add unit test for mentions antispam ruleGravatar kwzrd2019-11-09-0/+98
| | | | | | | | | | | | | | | | |
| | | | | | | | | | | | * | | | | Whitelist Discord Testers invite linkGravatar Matteo Bertucci2019-12-10-0/+1
| | | | |_|_|_|_|_|_|_|/ / / / / | | | |/| | | | | | | | | | | |
| | | | | | | | | | | | | * | | Make it easier for user to search for tagsGravatar Shirayuki Nekomata2019-10-18-9/+61
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | #### Closes #231 Applying the algorithm for `Needles and Haystack` to find and match tag in tags, for example: ![Example](https://cdn.discordapp.com/attachments/634243438459486219/634592981915140107/unknown.png) This only applies to searching tag_name with more than 3 in length, and at least 80% of its letters are found, from left to right. There are 3 levels of checking, stop at first found: - Check if exact name ( case insensitive ) O(1) getting from a dictionary Dict[str, Tag] - Check for all tags that has 100% matching via algorithm - Check for all tags that has >= 80% matching If there are more than one hit, it will be shown as suggestions: ![Suggestions](https://cdn.discordapp.com/attachments/634243438459486219/634595369531211778/unknown.png) In order to avoid api being called multiple times, I've implemented a cache to only refresh itself when the is a gap of more than 5 minutes from the last api call to get all tags. Editing / Adding / Deleting tags will also modify the cache directly. ##### What about other solution like fuzzywuzzy? fuzzywuzzy was considered for using, but from testing, it was giving much lower scores than expected: Code used to test: ```py from fuzzywuzzy import fuzz def _fuzzy_search(search: str, target: str) -> bool: found = 0 index = 0 _search = search.lower().replace(' ', '') _target = target.lower().replace(' ', '') for letter in _search: index = _target.find(letter, index) if index == -1: break found += index > 0 # return found / len(_search) * 100 return ( found / len(_search) * 100, fuzz.ratio(search, target), fuzz.partial_ratio(search, target) ) tests = ( 'this-is-gonna-be-fun', 'this-too-will-be-fun' ) for test in tests: print(test, '->', _fuzzy_search('this too fun', test)) ``` Result from test: ```py this-is-gonna-be-fun -> (30.0, 50, 50) this-too-will-be-fun -> (90.0, 62, 58) ```
| | | | | | | | | | | | | | * | Fix linting errorGravatar kosayoda2019-10-28-2/+2
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | * | Apply suggestions from code review Gravatar Kieran Siek2019-10-28-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Fix incorrect docstring and comment Co-Authored-By: Mark <[email protected]>
| | | | | | | | | | | | | | * | Add delete emoji to paginationGravatar kosayoda2019-10-28-10/+21
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | * | Revert "Remove dev-test limit for filtering debugging"Gravatar kosayoda2019-10-28-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This reverts commit 56696b3b1858ad27dc7f3dce2898c7a6eb151f43.
| | | | | | | | | | | | | | * | Remove dev-test limit for filtering debuggingGravatar kosayoda2019-10-27-2/+2
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | * | Differentiate clear and delete emoji in help cogGravatar kosayoda2019-10-27-10/+13
| | | | | | | | | | | | | | | |