jesopo
4543f0a439
Switch from bot-url
metadata to bot
+homepage
( https://git.io/fjlSn )
2019-05-28 10:28:48 +01:00
jesopo
113a3b6405
re.escape nicknames for highlight prevention
2019-05-28 08:18:42 +01:00
jesopo
e483d4574b
'bot' -> 'self.bot'
2019-05-27 17:04:21 +01:00
jesopo
86d46c9917
re-add _reload function
2019-05-27 16:55:02 +01:00
jesopo
7b6905454f
Don't include module-unload numbers in "success" numbers
2019-05-27 16:54:44 +01:00
jesopo
850ddd0ab4
Use self.bot.load_modules in modules.py
2019-05-27 15:47:47 +01:00
jesopo
5b90a1a1d4
ModuleManager's load_module function now takes a ModuleDefinition
2019-05-27 14:57:16 +01:00
jesopo
76b268e60e
Switch to using tweepy for tweets module
2019-05-27 14:52:08 +01:00
jesopo
786f04ea16
set changed = True
when we pop a module with no dependencies left
2019-05-27 14:50:15 +01:00
jesopo
984274a9e1
fix cve.py helpstring
2019-05-25 21:44:50 +01:00
jesopo
268c5adb3c
Add depends-on
hashflags to relevant modules
2019-05-25 21:40:06 +01:00
jesopo
30b7c2419d
Actually save blacklist setting when reenabling a module
2019-05-25 12:36:07 +01:00
jesopo
1fb4936fad
Don't eat a character when preventing highlights
2019-05-24 21:33:01 +01:00
jesopo
4d4271435d
Use regex to prevent highlights in github module
2019-05-24 21:28:43 +01:00
jesopo
6b41834a35
connect_time is on server.socket, not server
2019-05-24 17:36:20 +01:00
jesopo
a3a2c1e5a4
Store IRCSocket connect_time, show bytes read/write per second in stats.py
2019-05-24 17:32:59 +01:00
jesopo
3e8a31ba73
_match_caps takes 2 args
2019-05-24 05:47:01 +01:00
jesopo
61af81c9de
Add comment about why we strip non-alnum chars from private commands
2019-05-23 16:10:31 +01:00
jesopo
4b5f839231
Forgot not
so it was stripping alnum chars, not non-almun chars
2019-05-23 16:05:41 +01:00
jesopo
f0230eb001
attempted_auth
is no longer used
2019-05-23 16:04:09 +01:00
jesopo
0a23e71e4e
.lstrip alphanumeric chars from private commands
2019-05-23 16:03:49 +01:00
jesopo
e2a878def1
Remove self
param of _validate
2019-05-23 15:36:04 +01:00
jesopo
f4b702fe04
Remove debug printing from config.py
2019-05-23 14:18:15 +01:00
jesopo
3806fd864b
Add require_setting to pronouns.py
2019-05-23 12:18:12 +01:00
jesopo
724b3380d3
Use require_setting in user_time.py and weather.py
2019-05-23 11:50:12 +01:00
jesopo
d8b625eaa9
Add setting example in location.py
2019-05-23 11:49:57 +01:00
jesopo
34b7768d42
Use require_setting in birthday.py
2019-05-23 11:46:00 +01:00
jesopo
ac9768fcde
Add system to require settings per event hook and show example help if they're
...
not present
2019-05-23 11:45:35 +01:00
jesopo
9df7b80d00
pass the command_prefix
that triggered an event through event kwargs
2019-05-23 11:44:52 +01:00
jesopo
9f2881323f
Only show register/identify advice when we're using internal
auth
2019-05-23 10:39:24 +01:00
jesopo
fef97bfcd8
Show example usage when a user does not provide a setting value
2019-05-23 10:36:59 +01:00
jesopo
13a878cc17
Remove array-setting log - we don't/shouldn't use it.
2019-05-23 10:34:10 +01:00
jesopo
cf29c37112
Add usage examples for all settings
2019-05-23 10:28:14 +01:00
jesopo
8cc0b84e53
event.eat()
for command.regex hooks in github module
2019-05-22 22:31:03 +01:00
jesopo
86c36d2ecc
LIGHTBLUE tick for verified twitters, not GREEN
2019-05-22 20:29:53 +01:00
jesopo
ce37c66e8a
Show a green tick for verified twitter accounts
2019-05-22 20:27:13 +01:00
jesopo
000b264d6d
move api
def to the only context that uses it, rename twitter_object
var
2019-05-22 19:49:55 +01:00
jesopo
aa75f4ef05
Implement auto-tweet setting to get tweet info automatically
2019-05-22 19:42:52 +01:00
jesopo
801eb5adb4
Refactor tweet-formatting logic in to it's own functions
2019-05-22 19:42:36 +01:00
jesopo
02ddb85167
Typo, taret
-> target
2019-05-22 19:34:30 +01:00
jesopo
f066dbb232
url_match
-> event["match"]
2019-05-22 19:03:51 +01:00
jesopo
5ab4c6cbff
target_str
is BitBot's own nickname for private messages
2019-05-22 14:26:22 +01:00
jesopo
e3d8063373
Check if a PRIVMSG/NOTICE is send *from* us before we check if it's sent *to* us
...
- so `user` isn't null when bitbot messages himself.
2019-05-22 14:23:38 +01:00
jesopo
e82a05dd37
RESUME errors now come as FAIL RESUME
2019-05-22 11:57:26 +01:00
jesopo
4ce8d6b461
Pass server
through FAIL events, use FAIL command
as part of event path
2019-05-22 11:56:21 +01:00
jesopo
cf89e28019
Log calls need formatting arguments as a second arg
2019-05-22 11:56:05 +01:00
jesopo
6ba3588294
stdout.write on success for !disconnect
2019-05-22 08:50:05 +01:00
jesopo
3e1a478f77
Remove old debug print()s from admin.py
2019-05-22 08:49:00 +01:00
jesopo
29d5ab9b56
_handle
takes a server param
2019-05-22 08:42:41 +01:00
jesopo
82e79ac4e5
there's no 1
index arg for a batch-end
2019-05-22 08:42:27 +01:00
jesopo
6a4852d2b4
server
and tag
var don't exist
2019-05-22 08:42:03 +01:00
jesopo
f52fd2adc4
We should be using CAP.available()
as it's not a string
2019-05-22 08:34:52 +01:00
jesopo
0dbf44a681
Default taget_str in send.stdout/send.stderr to target.name
2019-05-22 08:24:59 +01:00
jesopo
fe67edecac
change arg order for StdOut(/StdErr( in send.stdout/send.stderr events
2019-05-21 23:16:54 +01:00
jesopo
d003b8eb57
change position of target_str
in self.command
args
2019-05-21 23:14:56 +01:00
jesopo
6d44db6065
Remove references to STATUSMSG - just pass around a raw target_str
(target
...
without statusmsg chars stripped off)
2019-05-21 23:09:32 +01:00
jesopo
d5a973b84b
Don't allow karma for empty strings
2019-05-21 16:48:10 +01:00
jesopo
451d0c5928
typo, 'preix' -> 'prefix'
2019-05-21 15:39:54 +01:00
jesopo
73c3068a8d
event["channel"]
-> event["target"]
2019-05-21 13:53:36 +01:00
jesopo
7ddc539ea6
don't overwrite tags
var
2019-05-21 13:02:40 +01:00
jesopo
11e5cc50c4
Keep commands/outs.py tags-agnostic
2019-05-21 12:56:05 +01:00
jesopo
a031402c1d
Add masterpassword private-only command
2019-05-21 12:18:59 +01:00
jesopo
5dd337a92e
Move master-password generation out to it's own function
2019-05-21 12:17:01 +01:00
jesopo
5ba3c5d460
Typo, 'usernaame' -> 'username'
2019-05-21 10:45:15 +01:00
jesopo
9124f84e25
Strip "+" from the start of port
after checking if it is present
2019-05-21 10:42:40 +01:00
jesopo
1daa4217ec
Add !addserver command
2019-05-21 10:16:20 +01:00
jesopo
9a5ba753d0
event.eat() in command.regex for !title
2019-05-21 09:54:51 +01:00
jesopo
2fcaf68f0e
Move regex-based github info to command.regex hooks
2019-05-21 09:54:18 +01:00
jesopo
281e14d1fb
Add the basics of usig BRB instead of QUIT for draft/resume-0.4
2019-05-20 16:36:17 +01:00
jesopo
bdd161256d
has_capability
-> has_capability_str
, add new has_capability
2019-05-20 16:33:32 +01:00
jesopo
161fdb8aa6
"you cannot change your own karma" should be stderr not stdout
2019-05-20 14:14:44 +01:00
jesopo
02998efc43
Actually pass args_split in to _find_command_hook
2019-05-20 06:42:17 +01:00
jesopo
c9b9827c14
take/return args_split from _find_command_hook, for alias replacing
2019-05-20 06:39:58 +01:00
jesopo
2ff21f5f78
Typo, 'colr' -> 'color'
2019-05-19 21:41:56 +01:00
jesopo
c6f82d3866
green/red the whole of likes/dislikes, not just up/down symbols
2019-05-19 21:39:35 +01:00
jesopo
5ed9185fb5
Remove now-unneeded call to .buffer.skip_next()
after a preprocess.command
...
failure
2019-05-19 17:53:21 +01:00
jesopo
9d89d7198e
target
doesn't exist in message handlers
2019-05-19 17:36:31 +01:00
jesopo
db3525778e
Only buffer.skip() for non-regex commands
2019-05-19 17:34:14 +01:00
jesopo
bf6e4a0e40
green/red color for up/down votes on youtube videos
2019-05-19 17:33:02 +01:00
jesopo
4806e9c81e
Switch to using Capability.copy() for sasl
2019-05-19 11:13:37 +01:00
jesopo
c60094ea92
matched_caps is actually a str[]
2019-05-19 11:13:16 +01:00
jesopo
66ce2ee2b7
.copy() all the hardcoded Capabilities in line_handler/ircv3.py
2019-05-19 11:10:32 +01:00
jesopo
f386351b7b
Use Capability.copy() in metadata.py
2019-05-19 11:08:32 +01:00
jesopo
046bb2b8ae
Make use of Capability.copy() in resume.py
2019-05-19 11:01:44 +01:00
jesopo
e4bc57b3cc
Actually check auto-title
setting
2019-05-19 10:44:48 +01:00
jesopo
66c3d26531
Don't give draft/resume-0.4
as the non-draft arg to utils.irc.Capability
2019-05-19 10:34:50 +01:00
jesopo
5255820b87
draft/resume-0.3 -> draft/resume-0.4
2019-05-19 10:34:33 +01:00
jesopo
8be178f406
Use re.search, not re.match, for command.regex hooks
2019-05-19 08:41:20 +01:00
jesopo
7ccfa12b00
event["channel"]
-> event["target"]
(from regex-commands change)
2019-05-18 21:33:50 +01:00
jesopo
3b9efe769a
Change factoids.py to use regex commands
2019-05-18 20:18:55 +01:00
jesopo
6f0b31cb9a
Switch imgur.py to use command.regex system
2019-05-18 19:20:09 +01:00
jesopo
4e0e63e7f8
Hand over regex-based-command responsibilities to commands
module
2019-05-18 18:35:47 +01:00
jesopo
161c60c4f6
.lower() -> .upper() for CAP subcommands. makes a lot more sense.
2019-05-18 14:57:09 +01:00
jesopo
e7edd9997f
regex fix, move '+' inside capturing group
2019-05-18 11:13:19 +01:00
jesopo
0a89682816
match.group(0)
-> ref
2019-05-18 11:07:42 +01:00
jesopo
c474702afb
Catch github urls in auto-github
2019-05-18 11:05:38 +01:00
jesopo
eaee51f677
Don't try to set repo
to org
after we've already changed org
2019-05-17 10:28:34 +01:00
jesopo
5513cc3a80
change REGEX_ISSUE to actually accept a repo name without org name
2019-05-17 10:28:18 +01:00
jesopo
f3d9fbb216
Actually assume the provided "org" is the repo when repo isn't provided
2019-05-17 10:14:49 +01:00
jesopo
3411f12fc4
Use github-default-repo to fill in org when org is missing but repo isn't
2019-05-17 10:10:27 +01:00
jesopo
3bbc4b3b77
server
-> event["server"]
2019-05-16 14:28:20 +01:00
jesopo
385a4e3d4e
channel
-> event["channel"]
2019-05-16 14:27:07 +01:00
jesopo
ce1558e48b
Catch-and-bury utils.EventError in auto-github code
2019-05-16 14:25:37 +01:00
jesopo
54e8fc8029
\S not \s in github issue ref regex
2019-05-16 14:25:18 +01:00
jesopo
7ce6af53f7
_parse_pull and _parse_issue shouldn't have an event
param anymore
2019-05-16 14:20:50 +01:00
jesopo
a2321c693c
_gh_* functions were renamed
2019-05-16 14:18:42 +01:00
jesopo
20514cc871
Add auto-github
setting to automatically match and resolve github issue/pr
...
refs
2019-05-16 14:17:04 +01:00
jesopo
e0311c4b73
Allow people with silence
permission to use !silence too
2019-05-16 08:53:28 +01:00
jesopo
bf7d359092
Add a setting to opt-out of word count tracking
2019-05-15 22:44:47 +01:00
jesopo
052eba788f
Show server versoin (from RPL_MYINFO) on /api/servers
2019-05-15 17:13:05 +01:00
jesopo
7547eee96d
Catch server version string, from RPL_MYINFO
2019-05-15 17:12:21 +01:00
jesopo
94d2f103b0
Don't show ducks when the bot is silenced
2019-05-15 16:48:20 +01:00
jesopo
278d6f02d6
Don't collect preprocess.command
errors after we get a HARD_FAIL
2019-05-15 16:41:49 +01:00
jesopo
eb456f0123
Set silence.py's preprocess.command
hook to PRIORITY_HIGH, so that other
...
modules can't respond to the event with errors first
2019-05-15 16:39:11 +01:00
jesopo
f97eceb395
Import IRCBot in metadata.py
2019-05-15 11:19:40 +01:00
jesopo
af4edf389f
'_cap(' -> '_ack('
2019-05-15 11:11:12 +01:00
jesopo
7cccb482b7
Add first version of metadata.py - for ircv3 draft/metadata
2019-05-15 10:33:39 +01:00
jesopo
99ce2ac6dd
Switch to using utils.irc.Capability in sts.py
2019-05-15 10:31:55 +01:00
jesopo
a80eda614d
Add IRCBot.SOURCE, use it in ctcp.py
2019-05-15 10:30:36 +01:00
jesopo
5ca9ae550d
msgid has been ratified
2019-05-15 08:45:59 +01:00
jesopo
7ed4d5fa03
draft/msgid isn't ratified quite yet
2019-05-14 23:07:55 +01:00
jesopo
421d9c10c7
Add utils.irc.MessageTag and use it for both draft and ratified msgid
2019-05-14 13:02:45 +01:00
jesopo
b75fc02c4b
Add comment to clarify why we ignore 1-letter-nicks in _prevent_highlight
2019-05-14 11:01:31 +01:00
jesopo
69691e9c79
Don't prevent highlights for single-letter nicknames
2019-05-14 10:50:47 +01:00
jesopo
e09529260a
Pass server object in to _prevent_highlight
2019-05-14 10:24:31 +01:00
jesopo
9aeee86165
use irc_lower for preventing highlights, only lower() when needed
2019-05-14 10:15:52 +01:00
jesopo
0625102fa7
if_silenced_f
-> is_silenced_f
2019-05-13 20:58:44 +01:00
jesopo
0fbf993201
Expose is-silenced through Exports, use it in karma.py
2019-05-13 20:57:47 +01:00
jesopo
e8c4a92119
Fix copypaste fail for getting for Exports in karma.py
2019-05-13 20:57:29 +01:00
jesopo
7922f6e9a5
Added !silence, to silence the bot in a channel for 5 mins
2019-05-13 20:50:31 +01:00
jesopo
8885b407ea
Add !botlist and !rollcall
2019-05-12 22:37:08 +01:00
jesopo
d0573706e5
Move all actual nickname changing until AFTER events are fixed. it was actually
...
set_own_nickname that was really causing the issue.
2019-05-12 22:20:42 +01:00
jesopo
26f63410f2
Provide missing % formatting param for github release events
...
closes #52
2019-05-12 22:09:19 +01:00
jesopo
bc68b50874
send() is only for parsed irc lines
2019-05-12 22:07:25 +01:00
jesopo
3e9d628d64
Change user nickname before firing (received/self).nick events
2019-05-12 22:07:04 +01:00
jesopo
8c3ea677ec
Switch signals.py SIGHUP to also load new modules
2019-05-12 14:11:29 +01:00
jesopo
bb073dcdce
Handle ERR_SASLALREADY
2019-05-12 11:48:28 +01:00
jesopo
2d6d2a98d7
Typo in ducks.py, 'DEFAUL' -> 'DEFAULT'
2019-05-11 18:26:53 +01:00
jesopo
d291cd5063
Revamp how CAPs are tracked through REQ and ACK/NAK etc
2019-05-11 18:22:40 +01:00
jesopo
6ef7f8374d
Change ducks-min-message default to 100
2019-05-11 17:19:31 +01:00
jesopo
73052ddc49
Update !help usage string
2019-05-11 17:07:24 +01:00
jesopo
295f7a751c
Refactor CAPs in to objects
2019-05-11 15:11:09 +01:00
jesopo
90f375d764
Remove unused SCRAM functions from sasl/__init__.py
2019-05-11 15:07:53 +01:00
jesopo
81bb0242fe
Change !help to be !help <module> <command>
2019-05-10 16:11:53 +01:00
jesopo
4986c52d9b
ignore users ignored from !factoid for automatic factoid parsing
2019-05-09 13:48:45 +01:00
jesopo
9bdd28ce60
Ignore users ignored from !youtube for auto-youtube
2019-05-09 13:43:52 +01:00
jesopo
5dd019d79f
Handle dangling spaces at the end of a NAMES response
2019-05-09 11:55:35 +01:00
jesopo
511a1836bb
Only split NAMES reply at literal space, .split() is overzealous
2019-05-09 11:31:58 +01:00
jesopo
f7eae1a978
Tokenize IRC data as soon as it comes out of IRCServer
2019-05-09 10:36:33 +01:00
jesopo
cb25f70418
Catch UserNotFoundException in var e
2019-05-08 07:36:17 +01:00
jesopo
920c1d2cd8
Log URL when we fail to get a <title>
2019-05-07 14:44:29 +01:00
jesopo
ed8761ed5c
Change !uuid to !uuid4 to be clear that it's a uuid4 being generated
2019-05-07 11:48:16 +01:00
jesopo
670f682c62
Remove '"human"' key from location settings export - we dont use it and it's
...
using elements of 'location' that were removed
2019-05-07 10:59:24 +01:00
jesopo
543a01882b
Don't parse '/me's as commands
2019-05-06 23:26:13 +01:00
jesopo
3e3e39e054
Fix birthday.py help text copypaste fail
2019-05-06 19:27:42 +01:00
jesopo
c11afedba9
Add !serverunignore
2019-05-06 17:17:06 +01:00
jesopo
96550eaef0
put permission control on !serverignore, don't rely on setting default of None
2019-05-06 17:16:48 +01:00
jesopo
a368bc018a
server
-> event["server"]
2019-05-06 17:13:09 +01:00
jesopo
8312efcc1c
Pass server param to _is_ignored
2019-05-06 17:12:05 +01:00
jesopo
0114d35d4c
Add a mechanism to ignore specific commands for a whole network
2019-05-06 17:08:56 +01:00
jesopo
ac19e9cc95
Support only saving birthday day and month
2019-05-06 16:26:23 +01:00
jesopo
61b7dd33b6
Add !birthdays command to show birthdays today
2019-05-06 14:54:45 +01:00
jesopo
6f9383666f
Make birthdays more exciting
2019-05-06 09:05:31 +01:00
jesopo
f5d407830d
Added birthday.py
2019-05-05 22:54:55 +01:00
jesopo
f04d9d966e
Query weather for given args if they don't look like a user
2019-05-05 00:16:55 +01:00
jesopo
f715e46155
Stop using prevent_highlight. it ruins terminals on OS X
2019-05-04 23:28:51 +01:00
jesopo
dc17ef7bb9
Only handle 324 when we're actually in the channel
2019-05-04 21:39:35 +01:00
jesopo
009daaeb62
Give empty array arg to WARN call in github module
2019-05-04 08:26:27 +01:00
jesopo
d999548020
Change min duck messages to 40, change chance back to 5%
2019-05-03 16:47:56 +01:00
jesopo
8c8205522e
Actually import EventManager in ducks.py
2019-05-03 16:40:21 +01:00
jesopo
4d8b1a1a0d
Set received.message.channel priority to PRIORITY_MONITOR
2019-05-03 16:38:45 +01:00
jesopo
167fe7b070
Add !friends and !enemies to ducks.py
2019-05-03 16:34:41 +01:00
jesopo
c89742a7e7
Reset duck_lines to 0 when a duck has spawned
2019-05-03 16:26:35 +01:00
jesopo
b7e14148bb
Change duck-spawn change to 10% per message after 20 messages
2019-05-03 16:07:49 +01:00
jesopo
8ac93d57f3
there's no event
in bootstrap_channel
2019-05-03 15:44:13 +01:00
jesopo
2fd92ce2fa
bootstrap old channels for ducks.py
2019-05-03 15:42:39 +01:00
jesopo
5bfffc25e9
Refector ducks.py
2019-05-03 15:34:54 +01:00
jesopo
1a2309e4fc
add 'print-motd' bot setting, to enable/disable printing motd to log
2019-05-02 10:24:01 +01:00
jesopo
6e25505bba
Remove import pytz
from location.py, we don't use it
2019-05-01 16:15:42 +01:00
jesopo
ed57ac7c17
Move isgd.py to shorturl.py and switch back to using bit.ly
2019-05-01 08:17:48 +01:00
jesopo
44b15073e7
No longer prefix stderr with "!", it doesn't really make sense
2019-04-30 22:45:52 +01:00
jesopo
677b488ab0
Typo in commands/outs.py, 'methd' -> 'method'
2019-04-30 22:45:37 +01:00
jesopo
8a9fedb875
Limiit !to to 5 messages per user
2019-04-30 11:57:31 +01:00
jesopo
2d2ea2fc3a
Added pronouns.py
2019-04-30 11:51:43 +01:00
jesopo
1ed9d06c9d
resume.py should be using IRCServer.send_raw
2019-04-28 20:41:55 +01:00
jesopo
bcae650565
Actually provide formatting arg for user_time.py error
2019-04-28 15:43:56 +01:00
jesopo
3fce209a99
Change location.py to use lat/lon instead of continent/country/city
2019-04-28 15:38:26 +01:00
jesopo
74ef18a418
Add !w as an alias of !weather
2019-04-28 15:21:09 +01:00
jesopo
a7a3f5fd25
Remove incorrect and redundant usage
!weather
2019-04-28 15:20:37 +01:00
jesopo
91d32dae9b
"%", not ","
2019-04-28 14:13:26 +01:00
jesopo
33fc4ffbf7
Actually provide user nickname in !weather error message
2019-04-28 14:12:35 +01:00
jesopo
fbdd254c69
Add echo.py
2019-04-28 13:36:25 +01:00
jesopo
0ba1b275d9
Add user_time.py
2019-04-28 12:12:00 +01:00
jesopo
cbed30ed62
Change location.py to use geocoding, change weather.py in line with it
2019-04-28 12:11:23 +01:00
jesopo
795a9a91af
Remove debug print
2019-04-28 10:51:18 +01:00
jesopo
4466bc34de
Add location.py, to allow users to set their location
2019-04-28 10:50:35 +01:00
jesopo
24716402ec
Show the full result of a !config change
2019-04-28 10:50:19 +01:00
jesopo
347253249e
Add a setting to automatically shorten URLs when their title is retrieved
2019-04-28 00:35:41 +01:00
jesopo
98deba18ed
Add _name to urbandictionary.py for correct capitalisation
2019-04-27 22:27:36 +01:00
jesopo
437418d006
Use is-ignored export in title.py to ignore users for auto-title
2019-04-27 14:55:48 +01:00
jesopo
a5f8bb7d3d
Use is-ignored export in karma to allow ignoring users for karma
2019-04-27 14:51:26 +01:00
jesopo
5f4d5eb270
Use is-ignored export in sed.py to allow ignoring users from sed
2019-04-27 14:49:57 +01:00
jesopo
df39570d4a
Add ability to ignore users per-command
2019-04-27 14:49:45 +01:00
jesopo
f8e933d4cc
Delete 'ignore' setting when unignoring so it doesn't hold space in the database
...
but still defaults to false
2019-04-26 07:57:20 +01:00
jesopo
bac9692ec5
Change channel_op's _name from "Channel Op" to "ChanOp"
2019-04-26 07:26:33 +01:00
jesopo
da52baebcc
Check that we have an AbstractURL in DDG results
2019-04-25 20:49:27 +01:00
jesopo
b45b9b6219
Change copypasted !google help text
2019-04-25 20:19:25 +01:00
jesopo
789787b866
Add duckduckgo.py
2019-04-25 20:18:13 +01:00
jesopo
7643a962bd
Refuse to get the title for any url that points locall
2019-04-25 15:58:58 +01:00
jesopo
9ac7ead57e
Make masterlogin passwords one-time-use
2019-04-24 17:37:44 +01:00
jesopo
dffee4d223
Move REGEX_URL out of isgd.py and title.py in to utils.http
2019-04-24 15:46:54 +01:00
jesopo
cc9edc6adb
link
-> url
2019-04-24 15:37:14 +01:00
jesopo
50e3206a9f
Aloow !shorten to find the last posted url and shorten it
2019-04-24 15:36:26 +01:00
jesopo
df42f1d9c5
Store full non-hashed auto-title url in setting value
2019-04-24 15:07:02 +01:00
jesopo
71eb640fbd
Add ability to track (and show) who first send a specific link that was
...
auto-titled
2019-04-24 14:48:15 +01:00
jesopo
e095c56f77
Record and show when a !to was created
2019-04-24 14:32:56 +01:00
jesopo
dc102f258d
Add Database.servers.get_by_alias, move IRCBot.get_server to
...
IRCBot.get_server_by_id, add IRCBot.get_server_by_alias and change
!connect/!disconnect to take aliases instead of IDs
2019-04-24 12:07:30 +01:00
jesopo
e3100bb64a
Look at setting-specific part of export_settings to get validate
function, not
...
the whole dang dictionary
2019-04-24 11:02:41 +01:00
jesopo
87340bcbf9
change utils.iso8601_format to default to no milliseconds, switch to using
...
utils.iso8601 functions in badges.py
2019-04-23 21:27:43 +01:00
jesopo
537613545d
Only show 'submitted' pull_request_review events
2019-04-17 10:33:12 +01:00
jesopo
ee8c7813f7
Add IRCServer.send_raw so modules don't have to parse messages before sending
...
them
2019-04-16 13:47:45 +01:00
jesopo
959d6a067c
Only show no-commit pushes when it's a force
2019-04-16 10:24:55 +01:00
jesopo
cc203f1756
Show a push event even when there's no commits in it
2019-04-16 10:20:11 +01:00
jesopo
16083309ef
Add a space between channel name and kick reason in format_activity.py
2019-04-16 07:54:07 +01:00
jesopo
884d7ab06a
Boldify sed replacement text
2019-04-15 21:55:53 +01:00
jesopo
8ecd1f31c7
'set.py' -> 'config.py'
2019-04-15 17:08:01 +01:00
jesopo
81e9548827
Allow adding perform.py commands through chat and add !performexecute, to
...
execute all perform commands post-connect
2019-04-15 16:53:52 +01:00
jesopo
210125d90b
Only allow 'current channel' !config logic when we're in a channel
2019-04-15 16:48:04 +01:00
jesopo
f60deba6c7
Add a master-admin login system, to have a bot-wide password to give any user
...
using it complete admin permissions - mostly intended to add new admin users
2019-04-15 14:52:08 +01:00
jesopo
e12ad21c1a
Add/remove people from channels before received.join/received.part events
2019-04-15 14:41:09 +01:00
jesopo
cf9898d5bd
Support continuous alias arg replacements (e.g. "index 1 onwards" using "$1-")
2019-04-14 21:54:02 +01:00
jesopo
9e79320d50
'closed #123 without merging' -> 'closed #123 '
2019-04-11 13:09:30 +01:00
jesopo
225c0d7793
Don't remove the first char of 'setting' twice
2019-04-07 17:46:35 +01:00
jesopo
2947b92792
Show result when a setting is unset
2019-04-07 17:45:35 +01:00
jesopo
5611f4ceef
Strip "-" from setting name when first checking if it exists
2019-04-07 17:43:00 +01:00
jesopo
56dcc2306b
Remove "-" from setting name before getting its value
2019-04-07 17:38:52 +01:00
jesopo
444f37c3da
Add a way to unset a setting with !config
2019-04-07 17:36:29 +01:00
jesopo
d4c7c41c79
Add !config command, to group all settings activities in to 1 command
2019-04-07 14:00:27 +01:00
jesopo
b6d04152d0
Show QUIT reason as "" not None
2019-04-02 21:17:01 +01:00
jesopo
0b1c07b1ed
Set PART reason
to "" when it's None
2019-04-02 16:56:15 +01:00
jesopo
ad166a7d0a
Correctly support SETNAME being targetted at us
2019-04-02 14:21:16 +01:00
jesopo
42f79d8f26
.get eage-api-key and url in nr.service() to handle it not being present
2019-04-01 07:50:19 +01:00
jesopo
c697c58b52
set cve.py's _name to all caps "CVE"
2019-03-28 21:54:18 +00:00
jesopo
f39b723af4
Added cve.py
2019-03-28 21:47:35 +00:00
jesopo
023c6c9264
Only strip word stops from the right of a word
2019-03-28 14:35:20 +00:00
jesopo
3f8d5e9f50
Also human-ify coin bet amounts in a flip
2019-03-21 21:09:53 +00:00
jesopo
2f729eac46
Show coins in "human" form (with commas) in flip wins/losses
2019-03-21 21:08:04 +00:00
jesopo
e6a32a8bb9
Don't handle commented
state in pull_request_review
2019-03-19 16:10:59 +00:00
jesopo
76ae55499b
Log which server an ERROR came from
2019-03-19 10:26:15 +00:00
jesopo
c4458653d2
Added some -minimal categories for comment-related events
2019-03-15 21:13:39 +00:00
jesopo
6cd171b7d8
'title' -> 'pr_title'
2019-03-15 19:28:37 +00:00
jesopo
4388d17b99
Better display for approval/changes_requested in pull request reviews
2019-03-15 10:33:02 +00:00
jesopo
be77188e71
Don't use short/coloured hash for shortened urls (github)
2019-03-14 13:58:42 +00:00
jesopo
f236f879f4
Reload bot.conf and modules on SIGHUP
2019-03-13 18:27:34 +00:00
jesopo
4058608bf2
Add 'api-port' setting to bot.conf and use it in rest_api.py
2019-03-13 16:52:51 +00:00
jesopo
6463bb16b5
move code
in to the string format arg for log functions
2019-03-13 13:35:42 +00:00
jesopo
6c5a6ff9cd
Show returned status code when _handle finishes
2019-03-13 13:33:53 +00:00
jesopo
df3075ce27
Show user hostmask (not just nick) on formatted.join
2019-03-12 10:41:45 +00:00
jesopo
9026f722c1
Remove default logging, show request path in our own _handle logging
2019-03-11 12:16:56 +00:00
jesopo
96f8777a8f
Show ip and port as "ip:port" in _handle logging
2019-03-11 12:14:29 +00:00
jesopo
9d91ea6ed4
DEBUG log when REST API _handle starts and finishes
2019-03-11 12:12:51 +00:00
jesopo
695327c2e8
Don't fail when eagle api url/key are not present
2019-03-11 09:42:34 +00:00
jesopo
b995d9f954
Add --require-config hashflag in nr.py
2019-03-11 09:42:16 +00:00
jesopo
5d7f017c9c
Enum values shouldn't be all upper case
2019-03-10 13:14:25 +00:00
jesopo
2dc290951a
preprocess.send.* event don't have IRCChannel objects on them
2019-03-10 13:09:37 +00:00
jesopo
c2eb96882a
show short commit hash in individual push messages (github)
2019-03-10 10:31:32 +00:00
jesopo
2d949391a6
Support setting strip-color per-channel not just per-server
2019-03-09 13:37:59 +00:00
jesopo
4f74ca4c0c
Handle trying to strip colours from a PRIVMSG/NOTICE that has no message
2019-03-08 23:23:38 +00:00
jesopo
5165e53264
Fix local variable overwrite for reason
in formatted.quit logic
2019-03-08 17:20:57 +00:00
jesopo
c973dc550c
prefix formatted.mode.channel with "- "
2019-03-08 09:53:04 +00:00
jesopo
cbd6092ff1
Send IRCUser object on formatted.quit event
2019-03-07 21:44:32 +00:00
jesopo
c8f5f0b0ad
"- " should have been inside the string
2019-03-07 18:01:00 +00:00
jesopo
7811d9874c
Prefix user-related lines in format_activity with "- "
2019-03-07 17:58:17 +00:00
jesopo
b9fa74dbb5
Move PR number into/after action for pull_request events
2019-03-07 08:35:29 +00:00
jesopo
1dad4827b6
Set a user's username/hostname/account BEFORE sending a received.join
2019-03-06 15:51:10 +00:00
jesopo
c876940443
Set username/hostname on users on JOIN regardless of whether we know theirs
...
already
2019-03-06 15:50:24 +00:00
jesopo
fb5b956f99
Send IRCChannel on formatted.topic-timestamp event
2019-03-06 15:04:19 +00:00
jesopo
ed3fc0e5d4
don't utils.irc.parse_format in format_activity.py, so we don't have to use
...
raw_line in channel_log
2019-03-06 14:30:33 +00:00
jesopo
380d91aba7
Expose 'log' channel setting to !channelset
2019-03-06 13:57:41 +00:00
jesopo
b4b15e5678
Don't treat ACTION CTCP as a different event to normal PRIVMSGs
2019-03-06 13:51:38 +00:00
jesopo
61acf6cd8e
Attach channel object to formatted.rename events
2019-03-06 13:39:20 +00:00
jesopo
77dd36cbf6
Add channel_log module for per-channel logging
2019-03-06 13:36:46 +00:00
jesopo
9920721bc5
Pass IRCChannel and IRCUser objects on formatted events where applicable
2019-03-06 13:36:18 +00:00
jesopo
bca0d38388
Also print private notices
2019-03-06 08:08:40 +00:00
jesopo
b5b841033f
Do format parsing (color, bold, etc) in format_activity.py
2019-03-06 08:08:20 +00:00
jesopo
b549a28bed
'pull' -> 'PR' in !ghpull
2019-03-05 11:41:24 +00:00
jesopo
11c4d70156
add IRCServer.clear_send_buffer() to clear queued lines
2019-03-05 11:35:24 +00:00
jesopo
91c2ab03ba
add IRCServer.send_enabled, to prevent sending after QUIT in signals.py
2019-03-05 11:29:46 +00:00
jesopo
68ebecedfd
Don't send random quit quote on SIGINT
2019-03-05 11:25:34 +00:00
jesopo
9e98754188
Treat our own user as a regular user throughout line_handler
2019-03-05 11:20:32 +00:00
jesopo
79930be7a3
private notices shouldn't be sent out as formatted.notice.channel
2019-03-05 09:52:38 +00:00
jesopo
b4f3ff3344
_on_topic doesn't take an IRCChannel param
2019-03-05 09:30:50 +00:00
jesopo
2750f29989
We need to pass a user object to _privmsg
2019-03-05 09:30:36 +00:00
jesopo
0a5ebd0cf4
Use utils.ISO8601_PARSE in format_activity
2019-03-05 09:30:10 +00:00
jesopo
a9a3ad7abd
import datetime in format_activity.py
2019-03-05 09:29:54 +00:00
jesopo
db9744a0b5
Move formatted lines to loggable format to format_activity.py
2019-03-05 09:19:06 +00:00
jesopo
cf262c6d8a
We need to import EventManager in line_handler/__init__.py
2019-03-03 23:34:39 +00:00
jesopo
4aa86f865c
Remove added/removed/modified counts from commits (github)
2019-03-03 22:49:06 +00:00
jesopo
2affba99ca
Minor refactors across line_handler
2019-03-03 22:46:24 +00:00
jesopo
4aa9a06635
@utils.hook shouldn't be in line_handler/message.py
2019-03-03 22:45:54 +00:00
jesopo
7a3db82300
Add IRCServer.has_capability and use it throughout line_handler
2019-03-03 22:38:34 +00:00
jesopo
7c654b4475
Add COLOR_NEUTRAL, show repo/number/state colours in !ghissue
2019-03-02 21:32:08 +00:00
jesopo
a063f54a38
Don't show "[]" when there are no labels in !ghissue
2019-03-02 21:14:51 +00:00
jesopo
91a7f622b8
Don't check github-hide-prefix in !ghwebhook
2019-03-02 09:30:53 +00:00
jesopo
6b3b2b6e87
pinkify pull request number in !ghpull
2019-03-02 08:44:32 +00:00
jesopo
1ad9bd2047
Actually use colored state
in formatted line
2019-03-02 08:40:04 +00:00
jesopo
e4a4b193fe
Colour the state of a pull request
2019-03-02 08:38:56 +00:00
jesopo
c45fcb34d1
Change PR/issue number color to pink
2019-03-02 08:38:45 +00:00
jesopo
a30bc92b94
We don't need a "-" to separate PR title anymore
2019-03-02 08:31:06 +00:00
jesopo
7c63dbcf00
Tweak !ghpull format/colours
2019-03-02 08:29:45 +00:00
jesopo
b1e40e8d4c
Move HTTPWrongContentTypeException catch above Exception catch
2019-03-01 23:29:07 +00:00
jesopo
ab0b3be741
event
doesn't have a "channel"
in an API hook
2019-03-01 22:21:07 +00:00
jesopo
293b3a8ce3
Fix event
variable name collision (github)
2019-03-01 21:47:00 +00:00
jesopo
88a28352b8
Add a setting to hide github repo names
2019-03-01 21:20:19 +00:00
jesopo
43eda14267
Capitalise 'PR' in issue_comment events for pull requests (github)
2019-03-01 21:12:46 +00:00
jesopo
1e9772e578
Actually take coins when the house wins (coins)
2019-03-01 15:00:56 +00:00
jesopo
4467ba8ab6
specifically handle HTTPWrongContentTypeException in title.py
2019-02-28 23:30:09 +00:00
jesopo
9193a51c55
capitalise "PR" (Pull Request)
2019-02-28 23:16:37 +00:00
jesopo
985fc51dea
Move issue/PR number to after action description (github)
2019-02-28 23:15:13 +00:00
jesopo
1dab3dd07e
Change HTTP request logging from INFO to DEBUG
2019-02-28 17:51:26 +00:00
jesopo
35ba165e0c
Don't use shortened commit hashes to make URLs
2019-02-28 17:21:19 +00:00
jesopo
b4fca127d1
COLOR_POSITIVE should be green and COLOR_NEGATIVE should be red
2019-02-28 17:18:47 +00:00
jesopo
ae95f81c8b
Colorise PR/issue numbers (github)
2019-02-28 17:10:42 +00:00
jesopo
02c7c4503c
Make repo name grey (github)
2019-02-28 17:10:31 +00:00
jesopo
58b1e41b5d
Make some colours consts per type of content (github)
2019-02-28 17:09:52 +00:00
jesopo
cedd080f75
only use one "-" to separate text from url in lastfm.py
2019-02-28 16:34:22 +00:00
jesopo
bb6b292b6c
userplaycount is a str, not an int
2019-02-28 16:23:53 +00:00
jesopo
e77d681d7d
Don't show lastfm play count if it is 0
2019-02-28 16:22:35 +00:00
jesopo
f431fdfd16
Put github-hide-prefix check in all github commands
2019-02-27 14:56:20 +00:00
jesopo
0ed6d05b03
check on github-hide-prefix was put in the wrong function
2019-02-27 14:55:28 +00:00
jesopo
e6cb5e3e6b
Remove additional ')' (copypaste fail)
2019-02-27 14:53:03 +00:00
jesopo
52092cfe28
Make github-hide-prefix apply to !gt as well
2019-02-27 14:52:10 +00:00
jesopo
120eb03173
Show sender of an issue_comment, not the original commenter (for edits)
2019-02-26 21:55:34 +00:00
jesopo
5eceb5655c
Minor code stylisation in imgur.py
2019-02-25 09:59:38 +00:00
dngfx
6471360656
Update imgur.py
2019-02-25 09:01:52 +00:00
Dan
6771c3fec1
Switch to elif
2019-02-24 21:14:08 +00:00
Dan
ccd924d9e7
Remove superfluous json import and change datetime to match code standards.
2019-02-24 21:13:02 +00:00
Dan
4daba2b1ac
Remove bold title, set NSFW_TEXT variable, fix bold spacing, fix PEP8 line breaks between definitions. Remove _imgur def and hook straight into code.
2019-02-24 21:10:25 +00:00
dngfx
0444f9c0b9
Update imgur.py
...
Remove debug logging cruft
2019-02-24 20:37:17 +00:00
dngfx
266cbbfe1e
Update imgur.py
...
Add auto-imgur for auto linking of imgur and make the linking a bit fancier.
2019-02-24 20:34:10 +00:00
jesopo
f3f6102dbc
Don't duplicate "other-error"
(sasl.scram)
2019-02-24 09:04:42 +00:00
jesopo
77ab4707b2
Send IRCBot.VERSION on a CTCP VERSION (ctcp.py)
2019-02-24 08:39:20 +00:00
jesopo
fdce6ef7a6
We now need to .send( an IRCLine.ParseLine in perform.py
2019-02-24 08:04:35 +00:00
jesopo
1473f41b03
Fire preprocess.send per-command - use this to only strip colors from ParsedLine
...
objects for PRIVMSG and NOTICE
2019-02-23 21:40:11 +00:00
jesopo
8c94bcf6ca
Move utils.irc.IRCParsedLine to IRCLine.ParsedLine, improve truncation
...
mechanism, don't convert sent line from ParsedLine to text to ParsedLine for
line_handler handling
2019-02-23 21:33:04 +00:00
jesopo
f4a403836b
!raw needs to parse the line it's given in to an IRCParsedLine now
2019-02-23 16:11:41 +00:00
jesopo
6bdec003a1
Split PRIVMSG last param explicitly by " "
to make message_split
2019-02-23 10:54:17 +00:00
jesopo
ed4643b15d
Use new IRCChannel/IRCUser send_tagmsg in message_tracking.py
2019-02-22 22:37:27 +00:00
jesopo
9d72cbca73
Keep track of a user's away message, not just whether they're away or not
2019-02-22 22:26:50 +00:00
jesopo
dec3485071
Clear command Out text when there's nothing left to send
2019-02-22 17:47:25 +00:00
jesopo
9408cc9487
Typo, 'ValuError' -> 'ValueError'
2019-02-22 17:44:46 +00:00
jesopo
76c6cc3709
Typo, 'taget' -> 'target'
2019-02-22 16:31:17 +00:00
jesopo
5cae86333b
Typo, 'channels' -> 'channel'
2019-02-22 11:27:31 +00:00
jesopo
2b430839f9
.on
doesn't take kwargs - .call
does
2019-02-22 11:26:48 +00:00
jesopo
6177d5c984
Typo, 'channels' -> 'channel'
2019-02-22 11:25:04 +00:00
jesopo
47c2cbb0fa
Split line_handler.py out in to different files for different categories
2019-02-22 11:23:36 +00:00
jesopo
7469ff5bd6
Remove unused threading
import in line_handler.py
2019-02-22 10:26:31 +00:00
jesopo
1ac8bf6ec1
Support echo-message TAGMSG
2019-02-22 10:14:23 +00:00
jesopo
fde0838fdc
Remove code duplication for checking if a PRIVMSG/NOTICE was sent by us
2019-02-22 10:13:49 +00:00
jesopo
46fc552972
Add a require_access attribute to !ghwebhook
2019-02-21 21:18:07 +00:00
jesopo
0fc2dd8754
You can't minus a set from a list (auto_mode.py)
2019-02-21 21:14:57 +00:00
jesopo
1da66fb72d
Only give users auto_modes they don't already have (auto_mode.py)
2019-02-21 21:14:09 +00:00
jesopo
827832b2d2
Add channel_access
attributes to auto_mode.py commands
2019-02-21 21:10:06 +00:00
jesopo
e28885f746
Don't handle pull_request_review events when they've not been submitted
2019-02-21 11:19:36 +00:00
jesopo
deedab7248
Add IRCServer.send_joins, a nicer interface than manually ",".join
ing
2019-02-20 17:08:30 +00:00
jesopo
7f2b19cee3
Only send TAGMSG when it's definitely supported (message_tracking.py)
2019-02-20 16:10:37 +00:00
jesopo
ebd02dbfa9
IRCv3 message-tags
has been ratified
2019-02-20 15:59:33 +00:00
jesopo
81d82413d4
draft/message-tags-0.3 (JSON tags) was rejected
2019-02-20 14:46:40 +00:00
jesopo
807021ecc4
Pass key
through to _get_settings (rest_api.py)
2019-02-19 19:49:13 +00:00
jesopo
a3a75f3480
Remove copy-pasted ":" (rest_api.py)
2019-02-19 19:47:14 +00:00
jesopo
2691fa52e6
Do database-related work on UI thread (rest_api.py)
2019-02-19 19:45:26 +00:00
Jos Ahrens
850c717925
quit: Fix style but better
...
Positions the colon consistently, but better.
2019-02-19 18:06:24 +01:00
Jos Ahrens
7a7ae615da
quit: Fix style
...
Positions the colon consistently.
2019-02-19 18:02:24 +01:00
Evelyn
8879e6416e
How can you govern a country that has two hundred and forty-six varieties of cheese?
2019-02-19 15:03:31 +00:00
jesopo
cfdb48b3e7
Use IRCRecvBatch in line_handler.py
2019-02-18 23:01:25 +00:00
jesopo
186b6b82a2
Shift formatting protocol data to it's own file: utils.irc.protocol
2019-02-18 14:58:27 +00:00
jesopo
cae6d970ca
Sometimes lastfm doesn't give us a list of tracks (lastfm.py)
2019-02-18 13:22:12 +00:00
jesopo
6da35a899b
don't pass around has_arbitrary
- we don't need it.
2019-02-18 12:42:52 +00:00
jesopo
3a3b197309
Default cap_done to True, there's only one scenario were it is false (resume.py)
2019-02-17 16:00:33 +00:00
jesopo
dc7cdf31d0
Use '<' for '<' in README (permissions)
2019-02-17 14:29:50 +00:00
jesopo
5809ff8490
Add section about identifying (permissions README.md)
2019-02-17 14:28:59 +00:00
jesopo
9f2c501df6
Typo, 'BitBo' -> 'BitBot' (permissions)
2019-02-17 14:27:56 +00:00
jesopo
ec49140a70
Move permissions.py in to a directory and add a README.md for it
2019-02-17 14:26:18 +00:00
jesopo
cb0314da67
Put a helper function in utils to do iso8601 formatting. change IRCServer's
...
last-read setting to use it.
2019-02-17 14:15:40 +00:00
jesopo
107205d29a
Only completely prevent CAP END
when we get RESUME SUCCESS
(resume.py)
2019-02-17 12:48:22 +00:00
jesopo
92349ad696
typo, 'server.get_settings' -> 'server.get_setting' (resume.py)
2019-02-16 15:53:59 +00:00
jesopo
faf2401069
'received.numeric.###' -> 'received.###' throughout project
2019-02-16 15:53:14 +00:00
jesopo
342c1afa7e
Keep a track of channels we're in, in case we RESUME and need to get channel
...
information (e.g. `chathistory`) (resume.py)
2019-02-16 11:23:40 +00:00
jesopo
716568c21d
'src/IRCServer.capabilities' -> 'src/IRCServer.agreed_capabilities'
2019-02-16 09:12:43 +00:00
jesopo
3e4f3532a1
Put spaces either side of arrow symbol, makes it easier to see (github)
2019-02-16 09:06:29 +00:00
jesopo
e1ceed2907
Typo in comment, 'of' -> 'or' (sasl.scram)
2019-02-15 20:12:13 +00:00
jesopo
686d852e2b
SCRAM.error should be within standardised errors (put raw in self.raw_error)
2019-02-15 20:09:32 +00:00
jesopo
e51c653c1e
Parse and print when we send QUIT commands (line_handler, print_activity)
2019-02-15 19:58:51 +00:00
jesopo
f6179c46ab
Actually grab resume timestamp before it's overwritten (resume.py)
2019-02-15 10:26:33 +00:00
jesopo
a50b8c5694
comment typo, 'tage' -> 'tag' (github)
2019-02-15 07:49:07 +00:00
jesopo
a7d3fd93fc
hmac.digest
-> hmac.new
(the former is too new) (sasl.scram)
2019-02-15 01:21:39 +00:00
jesopo
4e7bfee3a6
Only send +draft/delivered
and +draft/read
on private message
2019-02-15 00:07:33 +00:00
jesopo
3efe97f6bb
copypaste fail, server
-> event["server"]
(message_tacking.py)
2019-02-14 21:59:00 +00:00
jesopo
52387900bc
Support draft/delivered
and draft/read
(message_tracking.py)
2019-02-14 21:51:51 +00:00
jesopo
ec3096fb50
Put information about USERPASS
in sasl/README.md
2019-02-14 12:28:36 +00:00
jesopo
d0ad43b027
Support a USERPASS
sasl mechanism that picks the best user:pass mech (sasl)
2019-02-14 11:57:53 +00:00
jesopo
33cacbb904
Don't crash when we try to send a message to channel we're not in
...
(line_handler.py)
2019-02-14 08:36:41 +00:00
jesopo
15fc5f7124
raise EventError when no results are found, to avoid double stderr write (youtube.py)
2019-02-14 01:00:16 +00:00
jesopo
2794d7235b
'current_badges' -> 'badges' (badges.py)
2019-02-13 16:33:28 +00:00
jesopo
b5b0464873
Typo, 'recieved' -> 'received' (badges.py)
2019-02-13 16:32:31 +00:00
jesopo
3834b246d6
Add !clearbadges (badges.py)
2019-02-13 16:31:32 +00:00
jesopo
acbe02baa6
Support IRCv3 draft/setname proposal ( #361 ) (line_handler.py)
2019-02-13 10:59:37 +00:00
jesopo
5b561b51f4
Fix completely broken chghost code. What on god's earth was I thinking.
2019-02-13 10:56:52 +00:00
jesopo
1927c3c8af
Catch and propagate IRCv3's FAIL command ( #357 ) (line_handler.py)
2019-02-13 10:39:10 +00:00
jesopo
460d56eb74
Never allow use of MD2 (sasl.scram)
2019-02-12 23:52:09 +00:00
jesopo
ac958384fe
SCRAM doesn't need constant_time_compare, nonces prevent replay (scram.py)
2019-02-12 23:47:24 +00:00
jesopo
62d2449958
MONITOR actually catches NICK changes (nick_regain.py)
2019-02-12 21:01:28 +00:00
jesopo
ef43c9aeef
Also use ISON even if MONITOR is supported - to catch NICK changes
...
(nick_regain.py)
2019-02-12 20:59:11 +00:00
jesopo
f2a7acfe4d
Use RPL_ENDOFMOTD or ERR_NOMOTD to denote end-of-registration and a time to
...
check if we got MONITOR in 005 at any point (nick_regain.py)
2019-02-12 20:48:52 +00:00
jesopo
554b041822
Remove debug print (nick_regain.py)
2019-02-12 20:43:50 +00:00
jesopo
3fc2fec324
Add nick_regain.py, to watch for the bot's desired nick becoming free
2019-02-12 20:42:26 +00:00
jesopo
1f1a19b5b6
set nick to '<nickname>|' when we get a nickname-in-use error (line_handler.py)
2019-02-12 20:40:40 +00:00
jesopo
2e925a6853
user
is null when we sent a NOTICE non-echo-message (line_handler.py)
2019-02-12 17:07:39 +00:00
jesopo
44df8240cc
user
is null when we're sending a message non-echo-mesasge (line_handler.py)
2019-02-12 17:04:55 +00:00
jesopo
e573f9de51
We can *receive* PRIVMSG/NOTICE without a prefix
(line_handler.py)
2019-02-12 17:02:12 +00:00
jesopo
21b2e0bbe7
Typo, 'datetme' -> 'datetime' (ctcp.py)
2019-02-12 16:55:56 +00:00
jesopo
0e1535a88d
Definte channel
before trying to use it for event hook constuction
...
(line_handler.py)
2019-02-12 16:50:11 +00:00
jesopo
938495fc3a
Refactor how CTCPs are sent through events
2019-02-12 16:49:57 +00:00
jesopo
b2d942027e
Implement IRCv3 echo-message (line_handler.py)
2019-02-12 16:12:15 +00:00
jesopo
e1c81efa6f
Add a way to blacklist CAPs per-network (line_handler.py)
2019-02-12 15:34:50 +00:00
jesopo
7e4c1cadb1
Add !cointoss to random_number.py
2019-02-12 15:23:02 +00:00
jesopo
ce23442f4b
Use constant-time compare in permissions.py for password identifying
2019-02-12 11:59:47 +00:00
jesopo
9667b8a6e0
Move constant-time compare function to utils.security
2019-02-12 11:57:49 +00:00
jesopo
305b998a52
Use hmac.compare_digest
to do a constant-time compare (sasl.scram)
2019-02-12 11:50:37 +00:00
jesopo
144182868c
Upgrade resume.py to draft/resume-0.3
and support sending last-read timestamp
2019-02-12 11:14:36 +00:00
jesopo
8c9626f0a9
Put an strf format for ISO8601 in utils
2019-02-12 11:08:24 +00:00
jesopo
98b82c7f2c
Insert label
tag to lines in labeled BATCHes (line_handler.py)
2019-02-11 22:19:20 +00:00
jesopo
2f5a232c4e
Hold on to tags and type for BATCHes
2019-02-11 22:15:12 +00:00
jesopo
b6df18930c
bytes_written
/bytes_read
is now on IRCServer.socket (stats.py)
2019-02-11 18:26:16 +00:00
jesopo
399723db94
Show file add/remove/change *after* saying it's a push (github)
2019-02-11 11:17:07 +00:00
jesopo
18bb7ec4af
Actually return function hook from _shutdown_hook (admin.py)
2019-02-11 10:09:39 +00:00
jesopo
e644888e3e
Actually shutdown socket when !shutdown is called (admin.py)
2019-02-11 10:00:55 +00:00
jesopo
9b44b6cd13
Shift socket.socket related logic to IRCSocket.py
2019-02-11 10:00:41 +00:00
jesopo
d087143a5d
Iterate through bot.servers.values(), not .keys() (admin.py)
2019-02-10 23:54:31 +00:00
jesopo
fadd21c6d9
Add !shutdown (admin.py)
2019-02-10 23:53:33 +00:00
jesopo
bb4ec082dd
Let IRCLine.Line handle truncating command output
2019-02-10 20:49:59 +00:00
jesopo
abf5679b68
Parse sent data in IRCServer._send, not IRCServer.send
2019-02-10 20:49:03 +00:00
jesopo
9ecec75828
'jesopo pushed commit to master' -> 'jesopo pushed to master' (github)
2019-02-10 15:09:20 +00:00
jesopo
9235d23350
Show when pushes are forced (github)
2019-02-10 15:06:26 +00:00
jesopo
af3057dee0
Don't send empty JOIN when we have no saved channels (channel_save.py)
2019-02-10 14:55:46 +00:00
jesopo
cf64e8832b
Make use of "when line sent" logic to disconnect after QUIT (signals.py)
2019-02-10 14:32:04 +00:00
jesopo
709365ecf8
Utilise new line-tracking logic to reconnect when QUIT sends (admin.py)
2019-02-10 14:26:24 +00:00
jesopo
d5bb3c5405
Have to refer to timer.kwargs
to get kwargs (in.py)
2019-02-10 13:27:49 +00:00
jesopo
25096c651a
Don't require client cert validation (rest_api.py)
2019-02-10 13:26:35 +00:00
jesopo
985f4d60a4
Only add a waiting clause for resume
CAP if the server actually ACKs it
...
(resume.py)
2019-02-10 13:22:53 +00:00
jesopo
c7d21e2d9e
Typo, 'wrap_scket' -> 'ssl_wrap' (rest_api.py)
2019-02-10 13:20:22 +00:00
jesopo
93dd75ff31
Added !inlist, to list !in reminders (in.py)
2019-02-10 13:18:25 +00:00
jesopo
1d206fe78f
Use newly abstracted away ssl_wrap (rest_api.py)
2019-02-10 12:38:53 +00:00
jesopo
05ae25d3d7
ERROR log ERROR
s from servers (line_handler.py)
2019-02-10 12:22:01 +00:00
jesopo
71eac9d3c0
Treat a QUIT
from hostmask :*
as referring to our connection (line_handler.py)
2019-02-10 00:29:22 +00:00
jesopo
ffdf49efc9
CAP END
for RESUME TOKEN
and RESUME ERR
, don't for RESUME SUCCESS
(resume.py)
2019-02-10 00:12:45 +00:00
jesopo
20d75e9716
Send request to RESUME a session AFTER we have a new token (resume.py)
2019-02-10 00:03:14 +00:00
jesopo
e2b019a9b8
log calls need a params
arg (resume.py)
2019-02-10 00:02:24 +00:00
jesopo
84a3bf6135
Also capture channel setting-related modes (e.g. +f for flood settings)
2019-02-09 18:48:18 +00:00
jesopo
90618e883b
Move REGEX_CUTOFF to outs.py (commands)
2019-02-09 17:52:51 +00:00
jesopo
1ff2a00c48
Move StdOut/StdErr specific consts to outs.py (commands)
2019-02-09 17:50:40 +00:00
jesopo
6b042d9460
Split command StdOut/StdErr in to their own file (commands)
2019-02-09 17:49:01 +00:00
jesopo
b9e71ec833
title
is already a parsed string from _get_title() (title.py)
2019-02-09 13:38:09 +00:00
jesopo
8bbfd1d1c3
Add empty params
arg to log call (title.py)
2019-02-09 13:37:21 +00:00
jesopo
730a4e6b87
Don't use the event system to get results from other modules - use exports
2019-02-09 13:14:45 +00:00
jesopo
4bc43f686e
'username' -> 'nickname', update RESUME nickname when our nickname changes (resume.py)
2019-02-09 12:33:26 +00:00
jesopo
d3f5ff78a6
Another 'new-token' -> 'new-resume-token' (resume.py)
2019-02-09 12:27:37 +00:00
jesopo
a23e46ddbf
'def on_cap_new' -> 'def on_cap_ls' (resume.py)
2019-02-09 12:27:13 +00:00
jesopo
1e6e030d6f
Actually do 'resume' -> 'resume-token' (resume.py)
2019-02-09 12:26:47 +00:00
jesopo
feffb2325b
"resume" -> "resume-token", "new-token" -> "new-resume-token", typo that was
...
causing resume token to be deleted as soon as it was set (resume.py)
2019-02-09 12:23:37 +00:00
jesopo
3fae5c52cd
Forgot to import EventManager (title.py, youtube.py)
2019-02-09 10:57:32 +00:00
jesopo
31367b2b5d
Eat youtube URLs on LOW priority, switch auto-title to MONITOR priority
2019-02-09 10:56:06 +00:00
jesopo
9f6aa93082
Actually return title text, not html Tag object (title.py)
2019-02-09 10:38:44 +00:00
jesopo
2ac5a53131
Add a setting to get the title from URLs automatically (title.py)
2019-02-09 10:35:37 +00:00
jesopo
6018cc098d
We still need to 'CAP REQ :sasl' when we get 'CAP NEW :sasl' (sasl)
2019-02-09 02:58:25 +00:00
jesopo
697ce2ba30
Do a SASL reauthentication when we get CAP NEW
for SASL (sasl)
2019-02-08 23:12:14 +00:00
jesopo
42e2596c9b
Return semi-helpful information to github webhooks (github)
2019-02-08 23:01:45 +00:00
jesopo
d772eaf36e
need to .items()
a dict to tuple-iterate it (rest_api.py)
2019-02-08 22:53:33 +00:00
jesopo
678e6606ed
Abstract away sending response to REST API request (rest_api.py)
2019-02-08 22:04:39 +00:00
jesopo
4a68baa0a6
Return path
from _path_data()
(rest_api.py)
2019-02-08 21:56:58 +00:00
jesopo
e84f91977c
Typo, 'utils.parse' -> 'urllib.parse' (rest_api.py)
2019-02-08 21:55:42 +00:00
jesopo
12591d2357
Remove now not used params on _request() (rest_api.py)
2019-02-08 21:54:33 +00:00
jesopo
c7843a9338
Simplify/refactor REST API request parsing code (rest_api.py)
2019-02-08 21:52:24 +00:00
jesopo
dc0a021231
Show capabilities in API server stats (stats.py)
2019-02-08 17:56:13 +00:00
jesopo
9a0b8f3d00
server_capabilities
is a dict, capabilities
is a set (line_handler.py)
2019-02-08 17:48:41 +00:00
jesopo
91f78e834e
Still REQ CAPs caught from cap.ls command if line_handler.py doesn't request any
2019-02-08 17:32:43 +00:00
jesopo
518f32c4ec
Fix 2 misspellings of "capabilities" and fix having not changed a variable name
2019-02-08 17:32:00 +00:00
jesopo
15ab772442
Request CAPs we support when we see them advertised with CAP NEW
...
(line_handler.py)
2019-02-08 17:30:07 +00:00
jesopo
d3f23eafb8
make !sp
and alias of !spotify
(spotify.py)
2019-02-08 15:34:04 +00:00
jesopo
d61bb387f7
Show when a check_run
is queued
(github)
2019-02-07 23:05:29 +00:00
jesopo
a1496e5415
Check that a check_run
actually started before it finished (github)
2019-02-07 22:59:50 +00:00
jesopo
03a1f62297
Script travis module in favour of github webhook check_run
events
2019-02-07 22:34:54 +00:00
jesopo
fb125081ad
Turn seconds in to seconds/minutes/hours/etc (github)
2019-02-07 22:32:48 +00:00
jesopo
ede385aca8
Use check_run
event instead of status
for CI (github)
2019-02-07 22:30:50 +00:00
Evelyn
ce78bd850a
quit: add quote
2019-02-07 18:21:35 +00:00
jesopo
53a819512f
Make commit hash LIGHTBLUE in status
event (github)
2019-02-07 15:56:30 +00:00
jesopo
58cd6338fd
Color/bold status
state (github)
2019-02-07 15:49:36 +00:00
jesopo
c401c45a02
typo, "_short_id" -> "_short_hash" (github)
2019-02-07 15:46:07 +00:00
jesopo
f6079d92c8
Remove hanging "or" that i forgot to remove (line_handler.py)
2019-02-07 14:26:36 +00:00
jesopo
172acfd0d5
Tidy up logic to figure out of a NOTICE is a AUTH notice (line_handler.py)
2019-02-07 14:25:56 +00:00
jesopo
f5f5a55e21
Add command to list, add and remove travis webhooks (travis)
2019-02-07 14:05:12 +00:00
jesopo
0bdac094ea
Actually accept !ghwebhook list
as a command (github)
2019-02-07 14:01:24 +00:00
jesopo
7d25ce44ad
Use HTML entity for less-than symbol (sasl README.md)
2019-02-07 13:53:46 +00:00
jesopo
35ad1c7c7b
Add SASL README.md
2019-02-07 13:51:08 +00:00
jesopo
a3ca29dabe
Show server name when we log a SASL failure (sasl)
2019-02-07 12:23:11 +00:00
jesopo
1485947fcc
First commit of travis webhook module
2019-02-07 11:49:42 +00:00
jesopo
90591ec5b4
Change isgd.py to use Exports to offer url shortening, not events
2019-02-07 10:07:11 +00:00
jesopo
d013703705
commit_comment
events have commit_id
in comment
, not in the root data (github)
2019-02-07 07:42:05 +00:00
jesopo
7dd1eca7ae
Don't use string concat when we're already using %s formatting (sasl.scram)
2019-02-06 23:04:26 +00:00
jesopo
65766a093a
Add more comments, re-seperate out self._ variables and seperate some compound
...
function calls on to different lines for readability (sasl.scram)
2019-02-06 22:58:16 +00:00
jesopo
c77d8aaac8
Default error
to ""
, _client_first
/_salted_password
/_auth_message
to b""
...
(sasl.scram)
2019-02-06 22:36:25 +00:00
jesopo
1bac2f67de
Add type hints to SCRAM ctor (sasl.scram)
2019-02-06 22:33:30 +00:00
jesopo
50a8de2792
Restrict scram algorithms to IANA Hash Function Textual Names (sasl.scram)
2019-02-06 22:28:50 +00:00
jesopo
4e3e782519
Remove pointless local auth_message variable (sasl.scram)
2019-02-06 22:00:23 +00:00
jesopo
efbbe4c3db
Move parsing username, password and algorithm to the only place that uses it and
...
add comments (sasl.scram)
2019-02-06 21:49:44 +00:00
jesopo
bffd43648d
uuid.uuid4() is not random enough for a nonce (sasl.scram)
2019-02-06 21:49:24 +00:00
jesopo
67252833c4
Remove pointless local salted_password variable (sasl.scram)
2019-02-06 21:19:25 +00:00
jesopo
cbdd8d6fc9
Remove pointless local assign of self._password (sasl.scram)
2019-02-06 21:16:55 +00:00
jesopo
90b540d5dc
Add type annotations to scram util functions (sasl)
2019-02-06 21:05:20 +00:00
jesopo
bf3986a1be
Log a WARN when we get a 904 (failed sasl)
2019-02-06 16:25:43 +00:00
jesopo
16ea48cb54
Assume we'll receive a 904 when SCRAM fails with an e=
param (sasl)
2019-02-06 15:50:42 +00:00
jesopo
c006435fa1
Set SCRAM state to just Failure
if there's a server-final-message error (sasl)
2019-02-06 15:41:31 +00:00
jesopo
09eb3d3314
Only panic about a scram failure if it's a server-final-message failure (sasl)
2019-02-06 15:38:59 +00:00
jesopo
0e63700761
Only send auth_text
if it's not None (sasl)
2019-02-06 15:37:34 +00:00
jesopo
be95514174
auth_text
would not be present in a failure scenario
2019-02-06 15:36:59 +00:00
jesopo
cfa590eef7
Handle error on server-final-message (sasl.scram)
2019-02-06 15:28:17 +00:00
jesopo
403466dee3
Remove particularly improper quit quotes, add Hillel the Elder quote (quit.py)
2019-02-06 14:22:27 +00:00
jesopo
3e54542b6a
arguments
was not defined if they weren't provided (sasl)
2019-02-06 11:22:13 +00:00
jesopo
0004a8a59c
Fix mypy linting issue with dict creation (scram.py)
2019-02-06 11:09:45 +00:00
jesopo
a7554b835e
"+" as part of a SASL handshake is irc-specific so remove it from scram.py
2019-02-06 11:07:50 +00:00
jesopo
6b4bb7cdba
Type annotate scram.py and don't pass base64 data to scram.py functions
2019-02-06 08:50:19 +00:00
jesopo
13083e60a6
Don't take a users coins when they make an invalid roulette bet (coins.py)
2019-02-05 23:00:56 +00:00
jesopo
aa7aa17ec1
Split hash and hmac logic out to their own functions (sasl.scram)
2019-02-05 22:53:55 +00:00
jesopo
5d51a283bb
Actually check that we don't have CAPs that we're waiting on a ACK/NAK for
...
before ending CAP negotiation (line_handler.py)
2019-02-05 22:26:57 +00:00
jesopo
5991e02b0a
Manually count ACK/NAK for REQed CAPs before ENDing CAP negotiation
2019-02-05 19:20:02 +00:00
jesopo
ff2d5ef7e7
Disconnect from server and throw an exception if SCRAM server verification fails
...
(sasl)
2019-02-05 17:04:00 +00:00
jesopo
fd08e23bd4
Move scripts module to it's own directory
2019-02-05 16:56:21 +00:00
jesopo
8e59809db2
CAP capabilities would not be index 2
if the line is multiline
...
(line_handler.py)
2019-02-05 16:48:12 +00:00
jesopo
b742b1ecee
Remove debug print in sasl/__init__.py
2019-02-05 15:58:11 +00:00
jesopo
1fe20a2c98
Move sasl.py to a directory module and move SCRAM logic to a different file,
...
move `github/module.py` to `github/__init__.py`
2019-02-05 15:54:20 +00:00
jesopo
d4503fdf28
Remove SCRAM-related variables on IRCServer object when we see
...
server-final-message (sasl.py)
2019-02-05 12:53:19 +00:00
jesopo
d68c73affa
Remove SCRAM debug logging (sasl.py)
2019-02-05 12:34:50 +00:00
jesopo
51a4b8ef4e
Support SCRAM SASL mechanisms (sasl.py)
2019-02-05 12:17:25 +00:00
jesopo
0344ad6470
Add ")" that should have been removed when we stopped using enumerate
for
...
github webhook hooks (github)
2019-02-04 21:35:31 +00:00
jesopo
ac16887c48
Reply to statusmsg commands (e.g. '/msg +channel !ping') with the same statusmsg
2019-02-04 21:32:44 +00:00
jesopo
e2d60a541c
Try to match against full repository name first, so that we can make specific
...
rules for specific repositories (github)
2019-02-04 10:17:27 +00:00
jesopo
66d2ef2c26
We don't need to enumerate hooks (github)
2019-02-04 10:17:15 +00:00
jesopo
36e838d585
Delete automodes
user_channel setting when it's empty (auto_mode.py)
2019-02-04 08:45:48 +00:00
jesopo
d7d707d980
user
doesn't exist in _move(), it's user1
(coins.py)
2019-02-02 20:41:08 +00:00
jesopo
1b94a72a65
apikey
command should have a minimum argument restriction (rest_api.py)
2019-02-01 12:02:02 +00:00
jesopo
520d8b681f
Actually add private_unban function def. oops. (channel_op.py)
2019-01-30 21:07:03 +00:00
jesopo
d2dbb0a249
Add private message unban
command (channel_op.py)
2019-01-30 21:06:02 +00:00
jesopo
98e1d4460e
Actually use channel
arg in _kick_command (channel_op.py)
2019-01-30 21:03:21 +00:00
jesopo
8345ea36d4
Support kick
and ban
command in private message (channel_op.py)
2019-01-30 21:02:12 +00:00
jesopo
cd93118571
server.get_channel
was moved to server.channels.get
a long time ago (set.py)
2019-01-30 19:40:20 +00:00
jesopo
a2e23acc61
Logging takes format params as a separate arg (commands.py)
2019-01-30 19:39:03 +00:00
jesopo
72072bbd3d
Make sure to call the specific hook we've decided is valid (commands.py)
2019-01-30 19:35:43 +00:00
jesopo
8ac989fa96
check we have a channel_arg
kwarg before parsing it as an int
...
(channel_access.py)
2019-01-30 19:20:11 +00:00
jesopo
0e66921d34
Break when we've found a suitable command hook (commands.py)
2019-01-30 19:15:11 +00:00
jesopo
b0d67e5170
Use correct arg indexes for private channelset (set.py)
2019-01-30 19:07:34 +00:00
jesopo
051e4347f9
Actually remove call to preprocess.command
to after min_args check
...
(commands.py)
2019-01-30 11:41:25 +00:00
jesopo
f25bfd0ae2
Correctly check if we're in a channel command before checking if the current
...
hook is valid (commands.py)
2019-01-30 11:37:47 +00:00
jesopo
c822a1afd6
Check min_args before we check if a user has permission (commands.py)
2019-01-30 11:37:29 +00:00
jesopo
fc39f8f9fc
We need to turn channel_arg
in to an int (channel_access.py)
2019-01-30 11:28:38 +00:00
jesopo
fc4a8d8e34
We should be using potential_hook
until we've decided on a valid hook
...
(commands.py)
2019-01-30 11:26:54 +00:00
jesopo
64d12e3415
Get all hooks when checking command hooks, not just the first (commands.py)
2019-01-30 11:23:17 +00:00
jesopo
8a832b7230
Check all hooks for a command and pick the first applicable one, to allow for
...
private_only and channel_only commands to share the same command string
(commands.py)
2019-01-30 11:20:14 +00:00
jesopo
b197a537f0
Add a private channelset
command (set.py)
2019-01-30 11:16:42 +00:00
jesopo
2071a10180
Support a way to check user channel access in a private command
...
(channel_access.py)
2019-01-30 11:16:34 +00:00
jesopo
bb84fc0291
Add a permission
to !channelunset and !channelget (set.py)
2019-01-30 08:10:41 +00:00
jesopo
9491a44295
Correctly compare current time and token expire time and actually cache the
...
token (spotify.py)
2019-01-29 22:46:00 +00:00
jesopo
d178938463
Typo, {,}
instead of {:}
made headers
a set (spotify.py)
2019-01-29 22:40:44 +00:00
jesopo
a177c5050e
URL_SPOTIFY
was renamed to URL_SEARCH
(spotify.py)
2019-01-29 22:39:58 +00:00
jesopo
74e8ad0351
Forgot to import time
(spotify.py)
2019-01-29 22:39:13 +00:00
jesopo
8acc01dd48
post_data
is the kwarg for POST data, not data
(spotify.py)
2019-01-29 22:38:31 +00:00
jesopo
bb047ec1b7
base64.b64encode(...)
takes a byte array, not a string (spotify.py)
2019-01-29 22:37:44 +00:00
jesopo
af7a765547
Forgot to import base64 (spotify.py)
2019-01-29 22:36:54 +00:00
jesopo
2d085e7f91
Spotify now requires access tokens to use it's API (spotify.py)
2019-01-29 22:34:28 +00:00
jesopo
0c319be1e5
Correct usage help for kickban/tempkickban (channel_op.py)
2019-01-29 17:37:14 +00:00
jesopo
5e91f0d209
Remove haveibeenpwned.py
, it's 99% useless
2019-01-29 16:01:43 +00:00
jesopo
a501fdea1f
Stop processing a command when we've decided the user doesn't have permission
...
(commands.py)
2019-01-29 15:38:04 +00:00
jesopo
249734ebef
We don't have an event object in _has_channel_access
(channel_access.py)
2019-01-29 15:35:38 +00:00
jesopo
e0722dfc8a
Seperate out access checking logic so we can call across-modules with the event
...
system to check if users have specific channel access (channel_access.py)
2019-01-29 15:33:55 +00:00
jesopo
7937be5128
Don't double up command prefix in !usage
output (commands.py)
2019-01-29 08:36:47 +00:00
jesopo
f97c1f02fd
Actually show the command prefix we now pass to _get_usage (commands.py)
2019-01-29 08:33:32 +00:00
jesopo
79ff20b66a
Show command prefix in usage strings (commands.py)
2019-01-29 08:32:22 +00:00
jesopo
5d47e7e895
Add a permission
to !ghwebhook so an admin user can use it without +o (github)
2019-01-29 08:06:59 +00:00
jesopo
0564a173a3
Typo, 'acess' -> 'access' (channel_access.py)
2019-01-29 07:35:48 +00:00
jesopo
66b2ffee68
Support *
as a channel permission, to give users all access
...
(channel_access.py)
2019-01-29 07:32:25 +00:00
jesopo
5e5a62044c
We don't need a seperate command for !channelset
override (set.py)
2019-01-29 07:18:03 +00:00
jesopo
08404c4694
Use new utils.consts.PERMISSION_FORCE_SUCCESS
in permissions.py
2019-01-29 07:14:53 +00:00
jesopo
f9446a3663
Show an error when an unknown subcommand is given to !access (channel_access.py)
2019-01-29 00:14:33 +00:00
jesopo
10b2ace653
Add require_access
to commands on channel_op.py
2019-01-29 00:08:21 +00:00
jesopo
a3a535b195
Delete a user's 'access'
channel setting when they have no permissions left
...
(channel_access.py)
2019-01-29 00:02:56 +00:00
jesopo
1b933e7c00
IRCUser.User objects don't have .id
, they have .get_id()
(channel_access.py)
2019-01-29 00:00:15 +00:00
jesopo
549332db38
Check a return is truthy before we decide it's an error (command.py)
2019-01-28 23:57:12 +00:00
jesopo
ee1770cc08
Typo, force_success
-> force_success = False
(commands.py)
2019-01-28 23:52:30 +00:00
jesopo
a94d35f0f1
Add channel_access.py
, to give permissions to users in a channel (similar to
...
chanserv)
2019-01-28 23:50:43 +00:00
jesopo
d10a6d94c1
Add a way to force success and force failure of a command permission check
...
(commands.py)
2019-01-28 23:29:52 +00:00
jesopo
5e12d87ca3
Use target
(after prefixes lstrip) to get channel object (line_handler.py)
2019-01-27 22:43:35 +00:00
jesopo
16337fa16e
We need to pass a str to lstrip, not an array (line_handler.py)
2019-01-27 22:40:29 +00:00
jesopo
1301e80621
Strip prefix_symbols
from PRIVMSG target, for e.g. 'PRIVMSG +#chan :hi'
...
(line_handler.py)
2019-01-27 22:38:19 +00:00
jesopo
0bb2491399
The event fired when we get an account-notify
message iss
...
`received.account.login`, not `received.account` (auto_mode.py)
2019-01-27 07:16:41 +00:00
jesopo
1e72c39fda
Handle prefix
being null when we've received a server notice (line_handler.py)
2019-01-26 19:39:49 +00:00
jesopo
3b17cbacea
Set server name by event["prefix"].hoskmask
not .nickname
, they're the same
...
thing at the moment when it's not a `nick!user@host` but eventually it might not
be (line_handler.py)
2019-01-26 19:38:14 +00:00
jesopo
0d7b39e7d9
extended-join
JOINs have 3 args, not 2 (line_handler.py)
2019-01-26 16:17:34 +00:00
jesopo
6affadd306
Pass category
arg to _set_quotes
in quote_add
(quotes.py)
2019-01-26 16:06:15 +00:00
jesopo
f217c5d192
Quote should be saved with saver and timestamp (quotes.py)
2019-01-26 16:03:40 +00:00
jesopo
eb5c685128
Typo, 'quote' -> 'quotes' (quotes.py)
2019-01-26 16:01:17 +00:00
jesopo
6e4607ea8d
_set_quotes
needs to be given a category (quotes.py)
2019-01-26 15:57:07 +00:00
jesopo
5b4954a96c
add !quotegrab to take the last message from a user and quote it (quotes.py)
2019-01-26 15:55:20 +00:00
jesopo
ed44e6f78b
Use .lower() on nickname, as we're using that on s
and nickname_lower uses
...
special irc casemapping (github)
2019-01-26 10:53:28 +00:00
jesopo
506aef6366
Actually use the output of _prevent_highlight (github)
2019-01-26 10:53:14 +00:00
jesopo
2d113011ed
Add a setting to insert zero width characters in to highlights (github)
2019-01-26 10:49:31 +00:00
jesopo
e6aad7e070
Don't give event
object to webhook functions - they don't need them
2019-01-26 10:33:45 +00:00
jesopo
eb3f4db828
Don't put channel messages as low priority, so we can still catch "bitbot: ++"
...
(karma.py)
2019-01-25 23:53:53 +00:00
jesopo
f86a852d55
Strip "," and ":" from karma targets (karma.py)
2019-01-25 23:45:44 +00:00
jesopo
3c6827850a
Remove users from channels they're kicked from (line_handler.py)
2019-01-25 18:59:00 +00:00
jesopo
45f47bc3fc
Prevent users partaking in the lottery if doing so would put their coin total
...
below the coin redemption amount (coins.py)
2019-01-25 16:04:10 +00:00
jesopo
d75e2452ce
Delete nickname_aliases.py as it's been disabled for a very long time due to
...
bugs
2019-01-25 13:21:44 +00:00
jesopo
335f1545a8
Give StdOut.send
the new method
param (commands.py)
2019-01-25 07:11:45 +00:00
jesopo
7b3d7f85a6
I totally forgot that we don't need flask. at all.
2019-01-24 19:17:31 +00:00
jesopo
301dd7378a
Add irc_lower()
and irc_equals()
to IRCServer.Server so that no where else
...
in the code has to know about the server having a casemapping
2019-01-24 17:12:50 +00:00
jesopo
5bfa0d2b50
'self._get_all_user_coins' -> 'self._get_user_coins', forgot to change this when
...
we moved back away from wallets (coins.py)
2019-01-24 11:27:57 +00:00
jesopo
8ba7cb0396
Move logging API key from INFO to DEBUG (rest_api.py)
2019-01-23 22:23:21 +00:00
jesopo
086629f2dc
Logging shouldn't use %
string formatting (rest_api.py)
2019-01-23 22:10:32 +00:00
jesopo
6fef7fd0c6
INFO log when we get a HTTP request with an API key (including the key's
...
comment) (rest_api.py)
2019-01-23 22:08:26 +00:00
jesopo
26603c23ac
Also pass method
to StdOut
/StdErr
Send()
when a send.stdout
or
...
`send.stderr` event is sent (commands.py)
2019-01-23 21:39:05 +00:00
jesopo
64cb723901
Move logic to get command-method
out of Out
object (commands.py)
2019-01-23 20:35:28 +00:00
jesopo
2c7c12e9e0
Typo, server.get_value
-> server.get_setting
(coins.py)
2019-01-23 11:26:01 +00:00
jesopo
756938a4c9
Use rpartition
to either get the last part of a ref/head/branch
ref or just
...
`branch` (github)
2019-01-23 08:56:36 +00:00
jesopo
fcbb530b9e
Don't throw an exception when we get the kind of format of ref
the create
...
event gives (only repo name, not `"refs/head/repo"`) (github)
2019-01-23 08:51:01 +00:00
jesopo
e45b72356c
Disable coin interest by default (coins.py)
2019-01-23 08:47:14 +00:00
jesopo
96f6be087a
Change another usage of coins
when it should be all_coins
(coins.py)
2019-01-23 08:23:09 +00:00
jesopo
c39f1e002f
Fix coins
name collision (coins.py)
2019-01-23 08:22:08 +00:00
jesopo
b456132318
Remove wallet and bank logic (coins.py)
2019-01-23 08:20:01 +00:00
jesopo
f4467ac0ed
Log a WARN when we get a HTTPTimeoutException while we're trying to get a git.io
...
short url (github)
2019-01-22 22:06:25 +00:00
jesopo
8024e53a68
Don't show current event filters comma-separated as they're not comma separated
...
when we set them and that's a little confusing (github)
2019-01-22 20:52:57 +00:00
jesopo
815eea69bd
Typo, had ")" closing an array instead of "]" (github)
2019-01-22 20:50:59 +00:00
jesopo
a27b567ae1
Support handling watch
event (repo being stared - misleading event name i
...
know) (github)
2019-01-22 20:49:31 +00:00
jesopo
c69f4414a0
Handle a situation where a repo full name isn't provided and there isn't one set
...
as default (github)
2019-01-22 17:16:04 +00:00
jesopo
fc5671c7c5
We only need one '-' between tweet content and short url (tweets.py)
2019-01-21 19:36:25 +00:00
jesopo
0fd180a5c2
'EventResultError' -> 'EventsResultsError' typo (maybe this should actually be
...
named 'EventResultError') (youtube.py)
2019-01-21 19:32:37 +00:00
jesopo
65db982f1f
Show a "failed to load results" error when a video_id search returns no results
...
(youtube.py)
2019-01-21 19:30:39 +00:00
jesopo
50349ab8c8
pr-all
also shows when there are new commits to a pull request (github)
2019-01-21 17:25:13 +00:00
jesopo
381e0ae336
Error log failure to get title of a url (title.py)
2019-01-21 14:39:20 +00:00
jesopo
8bf8097dd7
bus_stop
isnt a Response
object (tfl.py)
2019-01-21 10:46:23 +00:00
jesopo
3cefe87c5e
Show default github web hook event categories in ghwebhook.md (github)
2019-01-20 20:08:46 +00:00
jesopo
c6545ca847
Use the correct namespace for HTTPTimeoutException (wolframalpha)
2019-01-20 19:05:50 +00:00
jesopo
65f9184a54
Gracefully handle a timeout (wolframalpha)
2019-01-20 19:04:32 +00:00
jesopo
491db4fea4
Typo, '9)' -> '()' (github)
2019-01-20 13:03:36 +00:00
jesopo
7a7400922e
Add !ghwebhook list
to ghwebhook.md
2019-01-20 13:02:19 +00:00
jesopo
be772cb730
Add a !ghwebhook subcommand to list all registered web hooks (github)
2019-01-20 13:01:31 +00:00
jesopo
f9186d7334
typo, commit["pusher"]
-> data["pusher"]
(github)
2019-01-19 08:02:34 +00:00
jesopo
202991a268
use data["pusher"]["name"]
as data["author"]["login"]
doesn't exist (github)
2019-01-19 08:00:31 +00:00
jesopo
8c1b40e785
Clarify [hook]
and add sections for branches
subcommand (github)
2019-01-19 07:53:30 +00:00
jesopo
3835930bdb
Allow users to specify what branches are shown for github webhooks (github)
2019-01-19 07:48:24 +00:00
jesopo
0f9592063e
Show user login
not user name
(e.g. show username not display name) for
...
commits (github)
2019-01-19 07:23:35 +00:00
jesopo
1753329aaf
Show an error when a user specifies an unknown subcommand to !ghwebhook (github)
2019-01-18 14:21:53 +00:00
jesopo
3d2c11991e
Clarify wording of what can be in the list of shown events (github)
2019-01-18 14:12:29 +00:00
jesopo
d2b572849c
Correct markdown url (github)
2019-01-18 14:04:06 +00:00
jesopo
1950f1335f
Point out that users can use raw github events, not just event categories
...
(github)
2019-01-18 14:02:54 +00:00
jesopo
c7ba2b778b
Delete github-hooks
channel setting when it's empty (github)
2019-01-18 13:25:53 +00:00
jesopo
9bbf3147d0
Display event categories in a smaller font (ghwebhook.md)
2019-01-18 13:14:11 +00:00
jesopo
8c4c9ab90a
Added help file for !ghwebhook
2019-01-18 13:13:01 +00:00
jesopo
69edf039b3
Support modules being in their own folder and move github.py to github/module.py
2019-01-18 12:49:11 +00:00
jesopo
b7864ffb41
Typo, 'all_hook' -> 'all_hooks' (github.py)
2019-01-18 12:13:01 +00:00
jesopo
0414ed34e2
Move github hooks away from !channelset in to their own !ghwebhook command
...
(github.py)
2019-01-18 12:05:56 +00:00
jesopo
8addca13ec
Copypaste fail, 'c' -> 'category'
2019-01-18 08:20:03 +00:00
jesopo
be5c5e6c21
Allow non-category items to be placed in a channel's event categories, allowing
...
users to specify specific events (github.py)
2019-01-18 08:18:47 +00:00
jesopo
4981d70be4
combine github events and their actions to be able to filter by event type and
...
action. add/change event categories to use these (github.py)
2019-01-18 08:08:39 +00:00
jesopo
5dc5e3fbfd
LIGHTGREEN -> GREEN for successful commands (commands.py)
2019-01-17 21:10:12 +00:00
jesopo
72d4375e55
Only show specific actions for pull requests and issues (github.py)
2019-01-17 17:01:12 +00:00
jesopo
776f2faced
Actually use new sender
arg for _on_notice() (print_activity.py)
2019-01-17 14:51:44 +00:00
jesopo
2a7df864ef
ping
events don't need to know full_name
of repo (github.py)
2019-01-17 14:50:23 +00:00
jesopo
588b54b40b
Print when we send notices (print_activity.py)
2019-01-17 14:50:07 +00:00
jesopo
89d0c83acb
Clarify github webhook event names with some comments (github.py)
2019-01-17 14:31:23 +00:00
jesopo
ce1d1aa5f8
'issue' -> 'issues' (github.py)
2019-01-17 14:19:31 +00:00
jesopo
75b85e76c9
Add a channel setting for github webhook event filters (github.py)
2019-01-16 22:36:19 +00:00
jesopo
5bf603bbfa
typo, 'respository' -> 'repository' (github.py)
2019-01-16 22:32:17 +00:00
jesopo
77c7084e9d
Don't try to parse username and repo name from a full name if there's no full
...
name (github.py)
2019-01-16 22:28:12 +00:00
jesopo
a342f82f40
Do filtering of github events based on categories of events (github.py)
2019-01-16 22:26:31 +00:00
jesopo
f9bf1d03e8
Correct order of string formatting for github membership events (github.py)
2019-01-16 22:14:26 +00:00
jesopo
f50f2a6d51
Support organisation membership event (github.py)
2019-01-16 22:13:38 +00:00
jesopo
e49389232e
Support github events only related to an organisation, not a repo (github.py)
2019-01-16 22:13:14 +00:00
jesopo
8e5642f5d7
Check if page
is null before trying to access page.data
(eval_python.py)
2019-01-15 12:39:27 +00:00
jesopo
3eb87b06e1
'guid' -> 'uuid' as apparently guid is microsoft's name for a uuid
...
(random_number.py)
2019-01-14 21:37:14 +00:00
jesopo
7e85197d47
Change !gh to be an alias of !github (github.py)
2019-01-13 22:06:41 +00:00
jesopo
598fcb80b9
'to_ansi_colors(' -> 'parse_format(' as it's become a lot more than just colors.
...
strip \x08 (in case hexchat users paste it) (print_activity.py, src.utils.irc)
2019-01-13 21:56:36 +00:00
jesopo
9ab9400b46
Only show issue comment edit events when the body text of the comment has
...
actually changed (github.py)
2019-01-13 01:34:07 +00:00
jesopo
e523671633
Made positive karma show as LIGHTGREEN, not GREEN (karma.py)
2019-01-11 21:00:09 +00:00
jesopo
eadb49d41a
Don't use bolding for command colors (commands.py)
2019-01-11 20:57:52 +00:00
jesopo
3cc9bc9dbb
Karma is now being used as karma_str, thus we need a %s not a %d (karma.py)
2019-01-11 17:35:18 +00:00
jesopo
415afe7e27
Show positive karma as green and negative karma as red (karma.py)
2019-01-11 17:33:43 +00:00
jesopo
e5a5241615
Only try to regex match a youtube url if we actually have a search string
...
(youtube.py)
2019-01-11 12:03:23 +00:00
jesopo
59094568e0
Add youtube-safesearch channel setting, to allow channels to opt-in to turning
...
off any safe search filters (youtube.py)
2019-01-11 11:30:29 +00:00
jesopo
e62b3b58f4
"set"
-> "channelset"
for channel-related unset (set.py)
2019-01-10 22:43:12 +00:00
jesopo
0e9d2b3180
Add !unset and !channelunset (and !channelunsetoverride) (set.py)
2019-01-10 22:41:35 +00:00
jesopo
2f74100666
Don't have duplicate repo full name in ping
events (github.py)
2019-01-10 22:24:04 +00:00
jesopo
cbc0e81fb3
Send a notice to a channel when a new webhook registration is received
...
(github.py)
2019-01-10 22:14:40 +00:00
jesopo
73392e8a20
Pass username, repository, number to _gh_issue and _gh_pull (github.py)
2019-01-10 13:36:13 +00:00
jesopo
2d346e73bc
Seperate out issue/pr logic into their own functions and add !gh that will get
...
info on either an issue or a pull request (github.py)
2019-01-10 13:32:19 +00:00
jesopo
8da6036894
Show issue/pr state in !ghissue and !ghpull (github.py)
2019-01-10 13:23:32 +00:00
jesopo
d26a945c49
Show an error if !ghissue or !ghpull doesn't find the specified issue/pr
...
(github.py)
2019-01-10 13:18:58 +00:00
jesopo
86810290f7
rpartition (instead of partition) #number for github issues/pull, so that we
...
don't have to specify "#" when we're got a default repo (github.py)
2019-01-10 13:11:35 +00:00
jesopo
55b61649f4
copypaste fail, event["args_split"][0]
-> ref
(github.py)
2019-01-09 23:03:34 +00:00
jesopo
bba5733736
Command events don't have "channel"
, they have "target"
(github.py)
2019-01-09 23:02:39 +00:00
jesopo
5514c2b9c9
Add a way to set the default github repo for a channel (github.py)
2019-01-09 23:01:27 +00:00
jesopo
470f9fc945
from_repo
/to_repo
-> repo_from
/repo_to
(github.py)
2019-01-09 22:51:55 +00:00
jesopo
2afe2d1c57
Show which branch is being merged in to which (github.py)
2019-01-09 22:50:41 +00:00
jesopo
d6da46fac3
to_from
-> repo_to
(github.py)
2019-01-09 22:50:21 +00:00
jesopo
8399545fe3
Add missing "(" for github pull request message format (github.py)
2019-01-09 22:47:47 +00:00
jesopo
aa04071d89
def github(
-> def webhook(
(github.py)
2019-01-09 22:47:20 +00:00
jesopo
dc4c711fa0
Actually show deletions as deletions for github pull requests (github.py)
2019-01-09 22:46:57 +00:00
jesopo
8d3064d50c
Add !ghpull, to get information on a pull request from github (github.py)
2019-01-09 22:45:33 +00:00
jesopo
56f431176c
Boldify sender
on a pull request review comment (github.py)
2019-01-09 22:33:02 +00:00
jesopo
ac3c361399
Add !ghissue, to get information on an issue from github (github.py)
2019-01-09 22:30:11 +00:00
jesopo
93336efd38
Handle !soundcloud returning no results (soundcloud.py)
2019-01-08 10:14:21 +00:00
jesopo
38b7a1dadf
Typo in words.py: 'strippped_word' -> 'stripped_word'
2019-01-04 12:36:38 +00:00
jesopo
8171c5c492
Allow tracking words that have characters deemed as "start"/"end" characters
...
(words.py)
2019-01-04 12:13:36 +00:00
jesopo
47b17def99
Sort list of available settings for set/channelset/etc (set.py)
2019-01-03 22:02:51 +00:00
jesopo
e15c7ece5b
URL-unquote form-encoded data AFTER parsing it as a query string (github.py)
2019-01-03 21:55:21 +00:00
jesopo
498352d1ac
Support adding github webhooks for an entire "username" (github.py)
2019-01-03 21:18:40 +00:00
jesopo
cb3e40a462
Print a topic's set at time when we receive a 333 (print_activity.py)
2019-01-02 13:39:49 +00:00
jesopo
3d60d59510
We need to normalise between a single usage string and multiple (making both
...
lists) to reuse the formatting code (commands.py)
2018-12-29 21:38:03 +00:00
jesopo
ee8d3a6287
Remove an erroneous level of indentation that prevented the command being
...
prepended to a usage string when only 1 usage string was available (commands.py)
2018-12-29 21:35:06 +00:00
jesopo
e8b69b0a26
type
should be before number
in the string formatting of issue_comment
...
(github.py)
2018-12-29 21:15:50 +00:00
jesopo
5f994e599d
Show issue/pr number (github.py)
2018-12-29 19:05:14 +00:00
jesopo
d91e15abfd
html unescape tweet text
2018-12-27 21:57:33 +00:00
jesopo
30db81e0da
--require-config shouldn't have a space before it
2018-12-27 21:57:24 +00:00
jesopo
b8b0adb811
Sort nicknames case-insensitively (stats.py)
2018-12-26 23:24:43 +00:00
jesopo
e5600a6927
Sort user nicknames on /api/server (stats.py)
2018-12-26 23:22:12 +00:00
jesopo
f0ee00da3a
Typo, '==' -> '='
2018-12-22 09:36:13 +00:00
jesopo
7223e76e24
Copypaste fail from moving logic out to turn a date to a string ('value' -> 'dt)
...
(badges.py)
2018-12-22 09:35:11 +00:00
jesopo
13cf49ac5d
Add !upsertbadge, to update or add a badge with a date (badges.py)
2018-12-22 09:34:38 +00:00
jesopo
6c38f2f637
Better clarify !updatebadge's <date> arg in usage (badges.py)
2018-12-22 09:33:52 +00:00
jesopo
43361961bb
Move out logic to case-insensitively find a badge (badges.py)
2018-12-22 09:33:23 +00:00
jesopo
bd8ca2083b
Typo, 'aliase' -> 'aliases' (commands.py)
2018-12-22 01:06:42 +00:00
jesopo
be1d06796b
Add !removealias (commands.py)
2018-12-22 01:05:47 +00:00
jesopo
3039119f4a
Actually set new args_split (commands.py)
2018-12-22 01:02:55 +00:00
jesopo
ae5eb9fc47
.partition returns a tuple of 3 (commands.py)
2018-12-22 01:01:25 +00:00
jesopo
498c1d647e
Add basics of a command alias system
2018-12-22 01:00:38 +00:00
jesopo
44d2455766
This regex should have been r"" (commands.py)
2018-12-22 00:49:00 +00:00
jesopo
da42963e5c
Add help and usage (badges.py)
2018-12-22 00:36:43 +00:00
jesopo
d2770c9642
Show actual date (not just days since) for !badge (badges.py)
2018-12-22 00:10:44 +00:00
jesopo
c2cc4fbd61
Show badges as "[badge] on day [count]" (badges.py)
2018-12-21 10:01:28 +00:00
jesopo
af70a28a45
'recevied' -> 'received' (timer.py)
2018-12-20 23:55:45 +00:00
jesopo
fe197b97ea
Added timer.py
2018-12-20 23:54:35 +00:00
Evelyn
0c0e8c6b89
NR: list only called/total full count for service
2018-12-20 23:53:40 +00:00
Evelyn
aaca9dc4a6
Quit: We're getting there
2018-12-20 23:45:30 +00:00
jesopo
be7ae375ca
Check that a user is updating an existing badge (badges.py)
2018-12-20 21:10:41 +00:00
jesopo
ebc835e6d5
'found_Badge' -> 'found_badge' (badges.py)
2018-12-20 21:05:47 +00:00
jesopo
20819a2478
Forgot to define now
in !addbadge (badges.py)
2018-12-20 21:04:45 +00:00
jesopo
9547c116f1
Added !badge (badges.py)
2018-12-20 21:03:21 +00:00
jesopo
fa86ba8827
Always show badge names with the original capitalisation (badges.py)
2018-12-20 21:03:04 +00:00
jesopo
f1e72d4b4e
Actually hook in to !removebadge (badges.py)
2018-12-20 20:51:03 +00:00
jesopo
a837ac3add
Actually give badge name with update success message (badges.py)
2018-12-20 20:49:51 +00:00
jesopo
24ea68d150
Tell a user when a badge was successfully updated (badges.py)
2018-12-20 20:49:24 +00:00
jesopo
e010d21e4c
year/month/day should be an int (badges.py)
2018-12-20 20:48:28 +00:00
jesopo
a43c5ef1f3
actually hook in to command for !resetbadge, format datetime to string before
...
putting it in a setting in reset_badge (badges.py)
2018-12-20 20:46:45 +00:00
jesopo
dbee856c4d
Add !updatebadge to manually set a date on a badge (badges.py)
2018-12-20 20:46:18 +00:00
jesopo
03a3bdd73d
Show "day"/"days" alongside day count
2018-12-20 20:30:23 +00:00
jesopo
ba3c1673ad
now
is already a datetime.date (badges.py)
2018-12-20 20:28:26 +00:00
jesopo
2e032bcc09
round up the current day when checking days since badge was created (badge.py)
2018-12-20 20:26:42 +00:00
jesopo
6d51473a73
Compare .date() when checking days between datetimes (badges.py)
2018-12-20 16:34:21 +00:00
jesopo
568eff01e0
typo in badges.py, 'datettime' -> 'datetime'
2018-12-20 16:32:04 +00:00
jesopo
f98797cd23
to iterate by key,value we need to .items() on dict (badges.py)
2018-12-20 16:31:04 +00:00
jesopo
0f37455665
strf datetime before saving it in settings (badges.py)
2018-12-20 16:30:15 +00:00
jesopo
751c93d59c
'isonow' -> 'utcnow'
2018-12-20 16:29:19 +00:00
jesopo
2a84e18b2e
first commit of badge system
2018-12-20 16:28:14 +00:00
jesopo
41d680dad7
We should be checking if a channel name is in server.channels, not server
2018-12-19 21:43:10 +00:00
jesopo
8d8ebf7d55
Show sender
of a pull request comment action, not the comment's user
, for
...
when people edit other people's comments
2018-12-19 16:52:04 +00:00
Evelyn
aea215a647
NR: DEM is technically a permitted powertype
2018-12-18 20:30:10 +00:00
Evelyn
45fe512457
NR: fix regression introduced by HTTP util changes
2018-12-17 09:24:18 +00:00
jesopo
28900c2ff9
Correctly handle a 404 in thesaurus.py
2018-12-16 11:03:36 +00:00
jesopo
00ac4d208a
Channels are 'target' in command events
2018-12-15 22:57:38 +00:00
jesopo
179cb40163
Add missing .data
on a utils.http.request Response object (define.py)
2018-12-15 22:56:04 +00:00
jesopo
9658d0285e
Support turning safe search on/off in google.py
2018-12-15 22:53:27 +00:00
jesopo
1ffc7863a0
If a request to git.io times out, fall back to full url
2018-12-14 08:49:37 +00:00
jesopo
d2fe95e0cc
Fix missing change to new Response objects from utils.http.request (youtube.py)
2018-12-12 13:28:54 +00:00
jesopo
98ae6993e4
Typo, 'requestl' -> 'request' (wolframalpha.py)
2018-12-12 11:16:45 +00:00
jesopo
843d517553
'utils.http.get_url' -> 'utils.http.request' (github.py)
2018-12-11 22:40:20 +00:00
jesopo
c0002f4f09
Re-add accidentally removed ":" in trakt.py
2018-12-11 22:27:58 +00:00
jesopo
22c38ad083
Shorten github urls in github.py
2018-12-11 22:27:04 +00:00
jesopo
793d234a0b
'utils.http.get_url' -> 'utils.http.request', return a Response object from
...
utils.http.request
2018-12-11 22:26:38 +00:00
jesopo
a41cf7b471
Actually use action_desc
in github.py.issues, so that we can see what things
...
are labeled as
2018-12-10 21:07:38 +00:00
jesopo
d0caebbc57
Support fork
event (github.py)
2018-12-10 18:47:54 +00:00
jesopo
b696e4e818
Add basics of status
event handling, mostly for use with continuous integration (github.py)
2018-12-10 17:17:40 +00:00
jesopo
a3a88d4589
Use more distinctive arrow characters for youtube up/down votes
2018-12-09 21:02:58 +00:00
jesopo
6dc58d4ceb
Correctly support labeling pull requests, support unlabeling pull requests and support both on issues
2018-12-09 20:57:29 +00:00
jesopo
de60d245b5
Show newly added labels when a pull request is labeled
2018-12-09 19:36:23 +00:00
jesopo
8cc1168589
Return empty string on successful github webhook handling, not True
2018-12-08 09:10:44 +00:00
jesopo
9bef4b7df1
Switch to using a case insensitive dictionary for headers instead of doing
...
.title() on each header key
2018-12-08 09:00:12 +00:00
jesopo
281923a463
Check whether we actually have a httpd running when unloading rest_api.py
2018-12-08 08:56:47 +00:00
jesopo
476e4cc9c1
["review"]["user"]["login"]
-> ["sender"]["login"]
to show who created a
...
pull_request_review event, not who started the review
2018-12-06 18:35:46 +00:00
jesopo
3e0bd3ee85
Add 'bot-channel' config in bot.conf.example and use it, if present, in
...
bot_channel.py
2018-12-06 12:13:59 +00:00
jesopo
7d59898485
'X-GitHub-Event' -> 'X-Github-Event' now that we .title() header keys
...
(github.py)
2018-12-06 12:09:58 +00:00
jesopo
9918a72f80
.items() on self.headers, to correctly use it for a dict comprehension
...
(rest_api.py)
2018-12-06 12:03:58 +00:00
jesopo
786e8b89a3
'content-type' -> 'Content-Type' (github.py)
2018-12-06 12:01:23 +00:00
jesopo
e6b0d4d167
.title() all header keys (rest_api.py)
2018-12-06 12:00:45 +00:00
jesopo
809efc6793
Only pop MODE args when we're certain we should (pays more attention to
...
CHANMODES ISUPPORT)
2018-12-06 08:26:07 +00:00
jesopo
dd0c5093a0
Remove telegram functionality - it's very broken/outdated and needs a
...
complete rewrite
2018-12-05 15:53:49 +00:00
jesopo
a8cb500784
utils.irc.lower channel names when adding them to the autojoin list
2018-12-05 15:46:51 +00:00
jesopo
764e1e3245
Prevent setting values to array settings and prevent adding to non-array
...
settings
2018-12-05 12:13:29 +00:00
jesopo
08a74d8b4d
Don't try to call .isdigit() on an int object in coin.py.lottery_buy
2018-12-05 11:28:44 +00:00
jesopo
351a88bda6
Only gracefully handle SIGINT once
2018-12-03 19:46:15 +00:00
jesopo
48eeb11554
Remove use of print()
in modules/line_handler.py
2018-12-02 09:46:57 +00:00
jesopo
92f255e9be
typo in modules.py, '_reload' -> 'self._reload'
2018-12-02 09:19:03 +00:00
jesopo
389366ce5d
Take a name
param in modules.py._catch
2018-12-02 09:18:24 +00:00
jesopo
da81b20c01
Correctly return errors for load/unload, not just reload (modules.py)
2018-12-02 09:16:17 +00:00
jesopo
d1bbd8cfe3
Add missing urllib.parse import (github.py)
2018-11-30 21:54:51 +00:00
jesopo
fcc3bdda6b
Support form-encoded github webhook data
2018-11-30 21:53:47 +00:00
jesopo
35108efc5f
rest_api.py's '_safe_handle' function isn't used and doesn't need to be used now
...
that API calls are thrown straight on to the main thread
2018-11-30 21:39:28 +00:00
jesopo
aab84096fd
utf8-decode github webhook json data
2018-11-30 21:09:59 +00:00
jesopo
6724ef94e5
Make coins.py compatible with versions of python under 3.6
2018-11-30 20:38:03 +00:00
jesopo
4ae7d3fbab
Show who invited who when printing and invite (print_activity.py)
2018-11-27 17:36:22 +00:00
jesopo
6077d06c99
Copypaste fail, 'target_channel' -> 'event["target_channel"]'
...
(print_activity.py)
2018-11-27 17:34:10 +00:00
jesopo
e47edbddfb
Print when we receive and INVITE
2018-11-27 17:33:24 +00:00
jesopo
dfbc727dc7
Don't prefix "self." events with "received."
2018-11-27 15:43:32 +00:00
jesopo
71775803d0
Reload bot config (on USR1) on the main thread
2018-11-27 15:10:49 +00:00
jesopo
dba4c9561c
'line' -> 'output' (github.py)
2018-11-27 15:07:22 +00:00
jesopo
d13a5069e3
Grab response from functions asked to be executed on the main thread and feed
...
them back to the callers, allowing rest_api.py to take the main thread while
it's waiting for the response to give back to the requesting client
2018-11-27 14:25:12 +00:00
jesopo
00d4b9c73f
Show list of users in a channel, not just count
2018-11-27 13:34:51 +00:00
jesopo
7df55305ca
Make channel stats in /api/servers a dictionary
2018-11-27 13:24:38 +00:00
jesopo
ab60012cbe
Add channel stats to /api/servers
2018-11-27 13:23:20 +00:00
jesopo
8bbdcc6d4e
Send WHO on self mode change, to catch any important changes to our user
...
information that mode changes can cause (e.g. hostname change)
2018-11-27 13:16:43 +00:00
jesopo
08b4d94695
Fix missing spaces in some event calls in line_handler.py
2018-11-27 13:16:19 +00:00
jesopo
d010ca5c79
Use WHO/WHOX to also keep track of our own username/hostname
2018-11-27 12:14:03 +00:00
jesopo
72dca06626
Add a way to catch when a writebuffer is emptied so we can e.g. assure a QUIT is
...
sent before shutting down the bot
2018-11-27 11:56:03 +00:00
jesopo
231fa51129
use '~' instead of '±' to represent "changed files" in modules/github.py
2018-11-26 14:47:47 +00:00
jesopo
bac4ba89b7
Use send.stdout in modules/in.py
2018-11-21 20:05:08 +00:00
jesopo
b8518d745f
Move all logic related to score reasons until after we've checked if we have
...
reasons (mixed_unicode.py)
2018-11-20 20:43:26 +00:00
jesopo
993403f213
.items
-> .items()
2018-11-20 20:41:51 +00:00
jesopo
957b5413dc
Use collections.Counter
instea of itertools.groupby
to group together all
...
instances, not just consecutive instaces (mixed_unicode.py)
2018-11-20 20:30:48 +00:00
jesopo
45c7ce6da5
Add !disconnect to admin.py
2018-11-20 14:27:24 +00:00
jesopo
80dd3bb5e1
Don't count Unknown towards additional scripts count (mixed_unicode.py)
2018-11-20 14:17:46 +00:00
jesopo
0915dbd3fa
'AdditonalScript' -> 'AdditionalScript', 'score_reasons' -> 'reasons'
2018-11-20 13:50:07 +00:00
jesopo
537e2eebc4
Show reasons for score points (mixed_unicode.py)
2018-11-20 13:47:38 +00:00
jesopo
b98bf65a86
Add a point to a message's score for each additional script they use
...
(mixed_unicode.py)
2018-11-20 13:24:28 +00:00
jesopo
e31d9750ed
(for the moment) remove percentage-ising scores (mixed_unicode.py)
2018-11-20 13:23:11 +00:00
jesopo
5ea34b261f
TRACE log score with 2 decimal places (mixed_unicode.py)
2018-11-20 13:14:35 +00:00
jesopo
3dccc9f4e0
Keep a track of different scripts in a message, round score to 2 decimal places
...
(mixed_unicode.py)
2018-11-20 13:13:11 +00:00
jesopo
c59a5600a8
Score mixed unicode as a percentage (mixed_unicode.py)
2018-11-20 13:08:47 +00:00
jesopo
727ade4022
Only TRACE log when score is more than 0 (mixed_unicode.py)
2018-11-20 12:42:45 +00:00
jesopo
f507da3b9a
'BLUE' -> 'LIGHTBLUE' branch name for push
and create
events (github.py)
2018-11-20 12:40:26 +00:00
Evelyn
563bc59208
Mixed unicode: Add Cherokee and Tai Le blocks
2018-11-20 12:29:03 +00:00
Evelyn
22939dd0a9
Mixed unicode: Ranges expressed in hex, with comments
2018-11-20 12:18:56 +00:00
Evelyn
e70ec91a7a
Add Coptic range to mixed unicode module
2018-11-20 12:07:54 +00:00
jesopo
52d5b5da49
Detect full-width characters (mixed_unicode.py)
2018-11-20 12:00:47 +00:00
jesopo
e54db0858c
Detect Armenian script (mixed_unicode.py)
2018-11-20 11:44:13 +00:00
jesopo
b19ce0be2f
Add first version of modules/mixed_unicode.py, designed to detect when we get a
...
message that mixes scripts (latin, cyrillic, greek, etc) that might be spam
2018-11-20 11:38:30 +00:00
jesopo
c2ef675bf0
Better descript opened pull requests (github.py)
2018-11-20 10:27:28 +00:00
jesopo
c77ca64367
Change merged branch name from blue to light blue (github.py)
2018-11-20 10:16:39 +00:00
jesopo
371d9bd9d6
Only color branch name when it's not in the url
2018-11-19 21:36:24 +00:00
jesopo
ded49fe92a
But blue-ification on branch/tag name, not on "branch"/"tag"
2018-11-19 21:34:36 +00:00
jesopo
e5ae963193
Blue-ify tag/branch for create
event
2018-11-19 21:31:29 +00:00
jesopo
da2c403dd7
Don't bold action_desc
for pull_request event action (github.py)
2018-11-19 21:08:57 +00:00
jesopo
58a0cf97cf
Move "(" on to start line for a string format
2018-11-19 20:56:42 +00:00
jesopo
5767a1b32e
Show branch when a pull request is merged
2018-11-19 20:54:40 +00:00
jesopo
5d813175a1
Don't enable write throttling until we get 005
2018-11-19 10:12:52 +00:00
jesopo
9cdc37ce72
'factoid' -> 'value'
2018-11-18 11:18:37 +00:00
jesopo
c227f9a34f
Catch factoids in channel messages as '{!factoid <name>}' (factoids.py)
2018-11-18 10:31:44 +00:00
jesopo
fd805a07db
Make branch names blue AND bold! (github.py)
2018-11-18 10:27:19 +00:00
jesopo
7b430a71b0
Don't 404 when a repo is hooked in to but a specific event type isn't listened
...
for (github.py)
2018-11-18 10:25:32 +00:00
jesopo
6fbbcace66
Make branch names in commit notifications blueified
2018-11-18 10:20:16 +00:00
jesopo
ec373cf667
Add help/usage to factoids.py
2018-11-18 07:59:47 +00:00
jesopo
130da6f769
Add missing '%s' in string format (factoids.py)
2018-11-18 07:57:51 +00:00
jesopo
b811872577
'ModululeManager' -> 'ModuleManager' (factoids.py)
2018-11-18 07:56:55 +00:00
jesopo
5bb96c0d0c
Added modules/factoid.py
2018-11-18 07:55:43 +00:00
jesopo
870c56cfbb
hooks
-> targets
, to actually respect filtered-out channels
2018-11-17 22:39:14 +00:00
jesopo
a7e2eacf1d
typo in modules/github.py, 'targets.append(server, channel)' ->
...
'targets.append([server, channel])'
2018-11-17 22:35:32 +00:00
jesopo
369af13e4b
... this one too.
2018-11-17 22:34:51 +00:00
jesopo
dd47db25f9
I forgot that I'd changed how servers keep their list of channels
2018-11-17 22:33:31 +00:00
jesopo
dc1a292a75
Allow filtering by github event type
2018-11-17 22:32:44 +00:00
jesopo
099613d2bc
'tag' -> 'tag_name' (github.py)
2018-11-17 22:17:14 +00:00
jesopo
dfa11b0f18
Nope, "..." is an official git feature and it looks way nicer on github
2018-11-17 22:07:32 +00:00
jesopo
d35636733a
'..' not '...'
2018-11-17 22:01:58 +00:00
jesopo
39bbde57a0
'...', not unicode ellipsis
2018-11-17 22:01:09 +00:00
jesopo
3b952ba66e
Remove newlines for formatted strings where applicable (github.py)
2018-11-17 21:44:52 +00:00
jesopo
4ad35006c0
Show branch in commit notices in (github.py)
2018-11-17 21:44:33 +00:00
jesopo
e1cff13dbe
Put repo full name on each output automatically in modules/github.py
2018-11-17 21:41:39 +00:00
jesopo
f34bad8562
Support Github webhook release
events
2018-11-17 21:21:32 +00:00
jesopo
b17c8d79bf
Remove additional '%s' in modules/github.py.delete that was left over from
...
copypaste of `create`
2018-11-17 21:12:12 +00:00
jesopo
fa2de60edf
Also support delete
event
2018-11-17 21:10:03 +00:00
jesopo
32301ae334
'CREATE_EVENT' -> 'CREATE_URL'
2018-11-17 21:07:34 +00:00
jesopo
aeb7ee76ea
'name' -> 'login'
2018-11-17 21:06:27 +00:00
jesopo
c5293ef5bf
'pusher' -> 'sender'
2018-11-17 21:05:08 +00:00
jesopo
0da685bb0a
Actually, tag/branch creation comes under the create
event
2018-11-17 20:59:24 +00:00
jesopo
e6542f3fb2
Correctly show new tags being created in modules/github.py
2018-11-17 20:48:19 +00:00
jesopo
9f086d56a4
Only show first line of commit message
2018-11-17 20:33:23 +00:00
jesopo
0f2a8c7932
Minor code styling change in modules/8ball.py
2018-11-17 12:48:42 +00:00
jesopo
7ef8437d44
range()'s upper bound is not inclusive
2018-11-17 12:29:24 +00:00
jesopo
0da18aa86d
now i see why it was %s not %d
2018-11-17 12:26:21 +00:00
jesopo
9054ee7cd2
How hard is it to refactor a dice module
2018-11-17 12:25:14 +00:00
jesopo
349c9a0190
ints are not strings
2018-11-17 12:23:49 +00:00
jesopo
692c79c745
'reults' -> 'results'
2018-11-17 12:23:06 +00:00
jesopo
d130b0e59b
'die_sides' 'die_count' -> 'sides_n' 'count_n'
2018-11-17 12:22:05 +00:00
jesopo
0f8a3231c6
Should be using sides
and count
, not roll[0]
and roll[1]
2018-11-17 12:21:09 +00:00
jesopo
97b2158956
.partition returns 3 values!
2018-11-17 12:19:32 +00:00
jesopo
73ecb42ca9
Simplify modules/dice.py
2018-11-17 12:18:26 +00:00
jesopo
43e39c42c7
'bol' -> 'bold' typo
2018-11-17 09:40:44 +00:00
jesopo
2072c9f3e8
Boldify pusher
for combined commits
2018-11-17 09:39:27 +00:00
jesopo
b15ef9f739
use "before" commit hash for comparing a range of commits
2018-11-17 08:28:48 +00:00
jesopo
5a742f05a3
Typo in modules/github.py, 'moddified' -> 'modified'
2018-11-17 08:24:31 +00:00
jesopo
331a4e0a7a
'command' -> 'commit'
2018-11-17 08:22:39 +00:00
jesopo
f6b68815c9
utils.irc.bold needs to be given an empty string
2018-11-17 08:21:40 +00:00
jesopo
b27bffaa50
Typo in modules/github.py, 'const' -> 'consts'
2018-11-17 08:20:34 +00:00
jesopo
ea881724ee
Forgot to import itertools
2018-11-17 08:19:45 +00:00
jesopo
e0a6ba39c6
show added/removed/modified counts as unique files when we're aggregating
...
commits
2018-11-17 08:15:28 +00:00
jesopo
ffb2382b8f
Add missing ")"
2018-11-16 20:40:49 +00:00
jesopo
c0c6178c30
Show more than 3 commits in 1 message speficially designed for doing so
2018-11-16 20:39:37 +00:00
jesopo
10c457f524
Don't send more than 3 commits in one go
2018-11-16 20:23:34 +00:00
jesopo
39c313bd64
we need strings!
2018-11-16 17:43:05 +00:00
jesopo
b008bb2a0f
results
was already a ", ".joined string
2018-11-16 17:42:00 +00:00
jesopo
8e5415b887
second format arg should have been results
2018-11-16 17:40:49 +00:00
jesopo
b176701e0a
Fix string formatting of modules/dice.py
2018-11-16 17:39:33 +00:00
jesopo
cec97749e5
Make IP regex neater in modules/ip_addresses.py
2018-11-15 15:41:55 +00:00
jesopo
64a58fe041
Translate 'synchronize' to 'committed to' in modules/github.py's pull request
...
handling
2018-11-15 07:06:43 +00:00
jesopo
06078ba959
Prefix modules/rest_api.py logging with "[HTTP] "
2018-11-14 23:02:32 +00:00
jesopo
1275352576
Log HTTP events through regular logging
2018-11-14 23:01:22 +00:00
jesopo
e262af4acf
'self.message.*' now uses 'send.message.*'
2018-11-14 22:54:27 +00:00
jesopo
ba68f33999
This elif
should have actually been one even indented!
2018-11-14 22:18:54 +00:00
jesopo
21b757dbb0
IRCBuffer.add_notice
doesn't have an action
param
2018-11-14 22:16:39 +00:00
jesopo
ac87104151
Remove a ") i should have removed before
2018-11-14 22:14:12 +00:00
jesopo
c7f32a4066
only do server-notice checking if we have a "prefix" in event, even if it's None
2018-11-14 22:12:46 +00:00
jesopo
957b881dbd
if is_channel
should be if channel
, buffer.add_notice
doesn't take an
...
`action` param and `elif` can't go after `else`!
2018-11-14 22:07:01 +00:00
jesopo
378f4b1f93
Better parsing of CTCP messages, support raw.send.privmsg/raw.send.notice in
...
modules/line_handler.py
2018-11-14 21:28:27 +00:00
jesopo
05eea3b585
Strip font from the last message in a channel before trying to translate it
2018-11-14 14:44:01 +00:00
jesopo
ed838193aa
Better support passing "send" events through the parsers already present in
...
modules/line_handler.py
2018-11-14 14:41:28 +00:00
jesopo
aafe0624b2
Do a bold+unbold *after* the colored parts of github's "added/removed/modified"
...
to avoid the weechat bolding bug but not bold the colors
2018-11-14 08:51:49 +00:00
jesopo
775177a7ff
Add 375 data to server.motd_lines
2018-11-14 08:22:21 +00:00
jesopo
0b1881b1a9
purple doesn't need the bold() trick as weechat doesn't bold it to make it the
...
color it is, thus a forceful unbolding isn't required!
2018-11-13 17:59:45 +00:00
jesopo
765ae0fcf9
Add code to tokenize and ansi-replace IRC colors; use this in
...
modules/print_activity.py
2018-11-13 17:23:28 +00:00
jesopo
8b9062b942
Better constifying of color/font chars
2018-11-13 16:02:26 +00:00
jesopo
555e8faa03
Print MOTD in modules/print_activity.py (after caching it in
...
modules/line_handler.py)
2018-11-13 14:59:47 +00:00
jesopo
fad4715b5c
Add "prefixed-commands" to !channelset
2018-11-12 23:00:51 +00:00
jesopo
0c8678d44f
Add a way to tell bitbot to only response to highlight-based commands (e.g. "bitbot: ping") but ignore prefixed commands (e.g. "!ping")
2018-11-12 22:59:21 +00:00
jesopo
49a21b2d36
Add a way to prevent responses to commands at all in specific channels
2018-11-12 22:55:40 +00:00
jesopo
439994464f
The target channel of an /INVITE is the second argument!
2018-11-12 22:37:01 +00:00
jesopo
911ace524d
Typo in modules/rest_api.py, 'args_spit' -> 'args_split'
2018-11-12 22:20:46 +00:00
jesopo
161272daf5
Better denote variable-length "endpoint" arg in !apikey's usage
2018-11-12 20:44:46 +00:00
jesopo
6308ec86b7
Remove accidentally-added additional argument in modules/set.py.bot_set
2018-11-12 20:33:56 +00:00
jesopo
6e4e358ed1
Typo in modules/rest_api.py, 'seting' -> 'setting'
2018-11-12 18:18:07 +00:00
jesopo
78b3ca3cdc
Typo on modules/rest_api.py, '= =' -> '='
2018-11-12 18:16:55 +00:00
jesopo
eb215d61a1
'api-minify' -> 'rest-api-minify' and make it settable from !botset
2018-11-12 18:15:08 +00:00
jesopo
a0e86f79c3
Change API key checking on-request to match what the values should be in the
...
database (dict of '{"name": , "permissions": }')
2018-11-12 18:06:02 +00:00
jesopo
a943e69cee
Change API keys to be hex representations of UUID4s, change their value in the
...
database to be a dictionary ({"comment": , "permissions": }) and change the
!apikey command to take a `comment` arg (to note what specific keys are intended
for) and vararg `permissions` (a list of endpoints the API key is allowed to
hit)
2018-11-12 17:59:40 +00:00
jesopo
251f65c048
Boldify authors in modules/github.py
2018-11-12 17:16:17 +00:00
jesopo
d4bb690e83
Remove no-longer-used Regexes in modules/line_handler.py
2018-11-12 12:48:41 +00:00
jesopo
fa9c870e22
Boldify "merged"/"closed without merging" in modules/github.py
2018-11-12 10:24:22 +00:00