Commit graph

675 commits

Author SHA1 Message Date
jesopo
9f946e236d copy paste fail, batch end should be "-" not "+" 2019-02-19 08:25:25 +00:00
jesopo
81ae0cc889 Add make_batch and send_batch to IRCServer 2019-02-18 23:16:47 +00:00
jesopo
b76b153672 Add batch_start and batch_end to utils.irc.protocol 2019-02-18 23:11:36 +00:00
jesopo
509a7ff42e Default tags to null for utils.irc.protocol's message and notice 2019-02-18 23:06:41 +00:00
jesopo
07cb14d98c utils.irc.protocol.join()'s keys param should be typing.Optional 2019-02-18 23:03:21 +00:00
jesopo
3bb917b619 Add src/utils/irc/__init__.py that should have been added some commits ago 2019-02-18 23:00:50 +00:00
jesopo
cd97a653cc Don't try to use keys if we try to join a channel without any keys 2019-02-18 15:00:05 +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
d937145f93 Add missing : 2019-02-18 13:54:09 +00:00
jesopo
6da35a899b don't pass around has_arbitrary - we don't need it. 2019-02-18 12:42:52 +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
be495344d4 How did this newline get here 2019-02-17 12:40:31 +00:00
jesopo
716568c21d 'src/IRCServer.capabilities' -> 'src/IRCServer.agreed_capabilities' 2019-02-16 09:12:43 +00:00
jesopo
23b0e58665 Send CAP REQ in 10-item chunks (src/IRCServer.py) 2019-02-16 08:21:42 +00:00
jesopo
ed99d66163 Don't add a space after a formatted tagmsg in _tag_str (src/IRCServer.py) 2019-02-14 21:59:26 +00:00
jesopo
8d97e51bf3 Add IRCServer.send_tagmsg, to send TAGMSG commands 2019-02-14 21:36:59 +00:00
jesopo
708ba2ddc7 Support one-shot event hooks (src/EventManager.py) 2019-02-14 10:36:11 +00:00
jesopo
1136162057 Fix 'Optional[str]!=str' type hinting issue in utils.irc line parsing 2019-02-13 11:00:22 +00:00
jesopo
e1de8cd9be We were just checking if arbitrary was falsey, thus losing empty trailing args
(' :' with nothing after it) (utils.irc)
2019-02-12 20:42:09 +00:00
jesopo
b4092a14ca Also strip \x01 off the start of CTCP commands, if it's there (utils.irc) 2019-02-12 16:49:24 +00:00
jesopo
86bc49a0a1 Only put a ":" on trailing args when it's required 2019-02-12 13:55:57 +00:00
jesopo
01a7c05687 Change arg types of constant_time_compare to typing.AnyStr (utils.security) 2019-02-12 11:59:55 +00:00
jesopo
9667b8a6e0 Move constant-time compare function to utils.security 2019-02-12 11:57:49 +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
2f5a232c4e Hold on to tags and type for BATCHes 2019-02-11 22:15:12 +00:00
jesopo
b37a50ed7a IRCServer should handle ping_sent, not IRCSocket 2019-02-11 21:23:52 +00:00
jesopo
a8d9365442 last_read/last_send is now handled by IRCSocket.py 2019-02-11 20:49:53 +00:00
jesopo
6c6f1f9c2b socket.getpeername() can return more than 2 values (IRCSocket) 2019-02-11 20:34:15 +00:00
jesopo
137d5b1a58 connected status is now tracked by IRCSockets 2019-02-11 20:34:02 +00:00
jesopo
48fe6b7391 Add IRCSocket.connected_ip to hold on to the IP address we connected to (e.g.
so we know which IP we picked from a round robin DNS)
2019-02-11 16:10:23 +00:00
jesopo
9b44b6cd13 Shift socket.socket related logic to IRCSocket.py 2019-02-11 10:00:41 +00:00
jesopo
b6b7345764 We don't need to send writebuffer.empty event any more (src/IRCServer.py) 2019-02-11 00:00:58 +00:00
jesopo
63dc5009f7 Actually return str object from IRCLine.__str__ 2019-02-10 23:57:38 +00:00
jesopo
1d48f6f19d Add _char_limit return type hint, fix decoded_data return type hint
(src/IRCLine.py)
2019-02-10 23:52:25 +00:00
jesopo
ecb197858e Import IRCServer in IRCLine so type hint comment is valid (src/IRCLine.py) 2019-02-10 23:51:28 +00:00
jesopo
f8e6a55ada Add a comment as to why IRCLine's LINE_CUTOFF is 470, not 510 2019-02-10 22:52:23 +00:00
jesopo
fc5ade7112 Change LINE_CUTOFF to 470, now that we compute max char counts (src/IRCLine.py) 2019-02-10 20:54:12 +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
89f035fdcf Add IRCServer.hostmask() to construct our nick!user@host hostmask 2019-02-10 20:44:29 +00:00
jesopo
a3b9be3d3d Shift encoding/truncating IRC lines to src/IRCLine.py 2019-02-10 18:43:04 +00:00
jesopo
bd9eaad0b2 Return truncted data from encode_truncate and hold it in IRCLine.Line 2019-02-10 18:16:19 +00:00
jesopo
7952d4c366 Make use of utils.truncate_encode, to avoid cutting utf8 sequences in half 2019-02-10 16:48:08 +00:00
jesopo
f2c762a2d0 add utils.truncate_encode, to encode and truncate a string while respecting utf8 multi-byte encoding 2019-02-10 16:41:56 +00:00
jesopo
b744281e3d Don't send empty space with JOIN if key=="" (src/IRCServer.py) 2019-02-10 15:02:24 +00:00
jesopo
d62b8c79fd Return IRCLine object from IRCServer.send() (and functions that call .send()) 2019-02-10 14:21:14 +00:00
jesopo
8e03bc66af fix self.batches type hint (src/IRCServer.py) 2019-02-10 14:20:40 +00:00
jesopo
eb00f331e5 IRCLine's data should be bytes 2019-02-10 14:19:43 +00:00
jesopo
4772564115 Add missing src/IRCLine.py file 2019-02-10 14:18:33 +00:00
jesopo
28107292f5 now isn't defined now that throttle code has been separated out (src/IRCServer.py) 2019-02-10 14:12:39 +00:00
jesopo
7792be247c Track lines-to-be-sent up until they're completely sent, queue up more than 1
line at a time in write buffer if we've got space (src/IRCServer.py)
2019-02-10 14:09:27 +00:00
jesopo
7f7941f564 rename, 'IRCLine' -> 'IRCParsedLine' (utils.irc) 2019-02-10 14:08:59 +00:00
jesopo
23da45bebc Make line cutoff character count a const (src/IRCServer.py) 2019-02-10 14:08:07 +00:00
jesopo
41503ab5ae Add TimersContext.find_all 2019-02-10 13:01:52 +00:00
jesopo
7704de25b6 Add Timers.find_all, to find all timers of a certain name 2019-02-10 12:58:15 +00:00
jesopo
e558a7676b Abstract ssl socket wrapping away so we can reuse it 2019-02-10 12:36:52 +00:00
jesopo
1d807fefe0 Old copypaste fail - we were returning the most recent user id when creating channels
(Database.py)
2019-02-10 00:04:00 +00:00
jesopo
b44c456081 Set default values for various types of channel modes (src/IRCServer.py) 2019-02-09 18:52:59 +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
d86a0fc55c Return "0s" from utils.to_pretty_time when given 0 seconds 2019-02-07 22:47:03 +00:00
jesopo
bae98d1236 Send CAP LS after we send PASS (if applicable) (src/IRCServer.py) 2019-02-07 17:41:10 +00:00
jesopo
76fd67235a Add optional default param to Exports.get_one() (src/Exports.py) 2019-02-07 13:36:34 +00:00
jesopo
e124b8e79d Implement ExportsContext.get_one 2019-02-07 10:10:13 +00:00
jesopo
8c1c10b3c7 Implement Exports.get_one() 2019-02-07 10:02:27 +00:00
jesopo
f94f233eb3 Fix mypy typing issue with importspec loader Optionalness (src/ModuleManager.py) 2019-02-06 22:41:37 +00:00
jesopo
1895ac34d7 If a server has a hostname that's not an IP, use it as SNI server name 2019-02-06 18:11:19 +00:00
jesopo
70b29a345a Don't break if we try to "finish" a waiting CAP when it's already finished 2019-02-06 15:44:09 +00:00
jesopo
2f7937adc5 Don't .lower() nicknames in Database.py, it doesn't know about IRC casemapping 2019-02-06 11:25:20 +00:00
jesopo
cbbe6f1569 STARTTLS was removed long ago 2019-02-05 22:26:41 +00:00
jesopo
5991e02b0a Manually count ACK/NAK for REQed CAPs before ENDing CAP negotiation 2019-02-05 19:20:02 +00:00
jesopo
c311521a31 Switch to using __init__.py as main file of directory modules, so they behave
like a package (also put the modules manually in sys.modules
2019-02-05 15:53:11 +00:00
jesopo
607c6eddf9 Switch to a non-deprecated method of loading files by filename
(`importlib.util.spec_from_file_location`)
2019-02-05 13:34:13 +00:00
jesopo
5dda000c96 Add make_event(..) to EventHookContext 2019-01-30 19:37:52 +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
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
cc8478c50c Only search messages from other users in find_from (src/IRCBuffer.py) 2019-01-26 15:58:57 +00:00
jesopo
e1e4fbf9bc Add find_from to IRCBuffer.Buffer, to find the most recent line from a given
user (src/IRCBuffer.py)
2019-01-26 15:46:20 +00:00
jesopo
8dcd6b2937 Make sure more than one hook can catch preprocess.send but still respect any
that return a change to the output (src/IRCServer.py)
2019-01-26 11:05:25 +00:00
jesopo
1a24f17375 IRCServer.Server.irc_lower should have a return type hint of str 2019-01-24 17:15:02 +00:00
jesopo
3df6b39228 Typo, IRCServer.Server.irc_equal -> IRCServer.Server.irc_equals 2019-01-24 17:13:51 +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
baeff58539 Fix incorrect indentation level in Logging.py 2019-01-18 16:28:09 +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
4c5af0845c output of len() needs to have a -1 on it when matching it against indexes
within the given string (src/utils/irc.py)
2019-01-16 12:42:45 +00:00
jesopo
2331205368 Don't ignore a color code when it's right at the end of a message
(src/utils/irc.py)
2019-01-16 12:41:41 +00:00
jesopo
470f85b009 Pushing logging on to another thread was a ridiculous idea. it means CRITICAL
logs are in a race condition to write to file before the main thread exits.
2019-01-16 12:03:56 +00:00
jesopo
6405ee2582 Support removal of modes without args that we don't know about in a way that
doesn't push code execution down the wrong path (src/IRCChannel.py)
2019-01-16 11:59:36 +00:00
jesopo
aa40936ce6 Support a mode being removed from a channel, without an arg, that we weren't yet
aware of (src/IRCChannel.py)
2019-01-16 11:47:42 +00:00
jesopo
8ed89b3f31 Add src/utils/_consts_256_color.py that should have been added 2 commits ago 2019-01-16 11:25:40 +00:00
jesopo
3b75519fb0 Fix regression that caused only foreground to be parsed if there's foreground
AND background formatting (src.utils.irc)
2019-01-16 11:24:47 +00:00
jesopo
8f4312d002 Support IRC colors 16 through 98 2019-01-16 11:18:51 +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
97b7249989 don't consume 3 digits for a colour code when the first char is 0 and the second
two chars make up a valid colour code (src.utils.irc)
2019-01-13 01:54:02 +00:00
jesopo
9944f08acf Typo, '=' -> '==' (utils.irc) 2018-12-12 11:50:59 +00:00
jesopo
d5467aefe9 Support '99' as a 'transparent' irc color code 2018-12-12 11:49:42 +00:00
jesopo
85840a68dd Preserve logged exc_info across threads 2018-12-12 11:33:29 +00:00
jesopo
2d3bb2b5e8 Typo in utils.http.request, 'response_heders' -> 'response_headers' 2018-12-11 22:31:14 +00:00
jesopo
5b59740043 Pass a dict to utils.CaseInsensitiveDict, not a MutableMapping 2018-12-11 22:30:57 +00:00
jesopo
d373edfaae Add missing utils import in utils.http 2018-12-11 22:30:05 +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
f77c443ac1 Add type hint for Logging._queue 2018-12-10 13:38:49 +00:00
jesopo
312293b221 Make block param of queue.get() explicitly refer to block 2018-12-10 13:34:53 +00:00
jesopo
df8135f105 Put logging functionality on to it's own thread 2018-12-10 13:18:15 +00:00
jesopo
dea63d9cf2 By the time we take ref counts, we've already removed module from
`loaded_module`
2018-12-09 11:24:05 +00:00
jesopo
8c3f87b029 change self.modules to be a dict of str:LoadedModule, not str:BaseModule 2018-12-09 11:22:30 +00:00
jesopo
ac71cfa4fa Add missing change to loaded_module.module (from module) in unload_module 2018-12-09 11:20:55 +00:00
jesopo
91beadd1cd def LoadedModule -> class LoadedModule 2018-12-09 11:18:55 +00:00
jesopo
6935c926dc Don't store any information used to load/unload modules on the module it's self
thus preventing even the possibility that modules can change them
2018-12-09 11:15:04 +00:00
jesopo
1c546a8244 Add typing hints to CaseInsensitiveDict, fix it's __setitem__ signature, call
.items() on `other` in ctor
2018-12-08 09:13:01 +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
bae1fac147 Add returns type hint in EventManager.py.call 2018-12-06 10:15:12 +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
d60c441ce2 fix incorrect retyping of "event_path" as "event, path" (i wasn't paying enough
attention)
2018-12-05 15:23:40 +00:00
jesopo
4015275afc Add missing ")" from last commit 2018-12-05 15:19:58 +00:00
jesopo
df624e7e29 Don't do unnecessary work when someone tries to call a not-hooked-in-to event 2018-12-05 15:18:40 +00:00
jesopo
50149523dd re-add check in utils.irc.parse_line that prevents us having an empty string as
an arg when there's no non-arbitrary args
2018-12-03 18:25:57 +00:00
jesopo
9dd9111f85 Further clarification of type hints in ModuleManager.py, including now making it
explicit that module objects MUST inherit from BaseModule
2018-12-02 16:00:55 +00:00
jesopo
9466f57efc Use getattr to get Module classes out of modules in ModuleManager.py; this
makes more sense and removes some errors from type linting
2018-12-02 10:14:18 +00:00
jesopo
50ced296d1 Clarify func_queue type (IRCBot.py) 2018-12-02 10:08:58 +00:00
jesopo
10f84f970d Clarify/fix type hints throughout EventManager.py 2018-12-02 10:04:05 +00:00
jesopo
08bd31f150 A couple of tweaks to clarify some type hints 2018-12-02 09:56:57 +00:00
jesopo
c4ea6fa562 data is now line 2018-12-02 09:48:06 +00:00
jesopo
cbc3ae3432 Remove usage of sys.stderr in IRCBot.py, change disconnect logs from info to
`warn`
2018-12-02 09:43:57 +00:00
jesopo
9a311c88b6 Remove print calls from IRCBot.py, move received data logging to IRCServer 2018-12-02 09:41:21 +00:00
jesopo
eb0c13971a Omit Config keys that have falsey values (empty) 2018-12-02 08:28:59 +00:00
jesopo
cdfe6d2959 'uderline' -> 'underline' typo in utils.irc 2018-11-30 16:32:18 +00:00
jesopo
4dfb2ffeaa Support ANSI underline 2018-11-30 16:30:56 +00:00
jesopo
af0fddf9ba 'find_*_setting' functions don't exist anymore! 2018-11-28 10:12:17 +00:00
jesopo
e1cdd4a353 Add type hint for return type of IRCBot.trigger 2018-11-27 17:29:38 +00:00
jesopo
9d9deb28b5 Raise exceptions back up through .trigger() 2018-11-27 15:06:10 +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
7c4b2b6c4e Add .nickname/.username/.realname/.hostname to IRCServer 2018-11-27 12:16:36 +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
dce050aac5 Convert BOOLEAN sqlite3 types to bool objects when retrieving them 2018-11-27 11:39:50 +00:00
jesopo
fba1dd2271 Nope, just combine previous color-char and current color-char and see if it's
less than or equal to 15 (utils.irc)
2018-11-26 17:34:27 +00:00
jesopo
9a614846b0 Don't reject 6-9 (inclusive) when it's prepended by 0 (src/utils/irc.py) 2018-11-26 17:31:56 +00:00
jesopo
f93e3f927f If a color code is double-digit, make sure it's 0-15, not just 0-20 2018-11-26 17:23:11 +00:00
jesopo
8d32fed2fe ModuleWarnings in src/ModuleManger.py should be logged as warn, not error 2018-11-26 14:42:41 +00:00
jesopo
1b03d31c6b Switch back to logging events as 2 messages as a lot of other logs can happen
between the start and end of an event and grouping them together is very useful
2018-11-26 14:23:20 +00:00
jesopo
6d6bfa3262 Don't assume a given mode is in IRCChannel.modes when we check to see if a given
mode has any arguments against it
2018-11-26 13:39:26 +00:00
jesopo
8cd069d37d 'bot.log' -> 'trace.log' and add a 'warn.log' log file that only catches
warn-and-worse
2018-11-26 11:09:43 +00:00
jesopo
5b70f37796 also support zero-padded color codes 2018-11-25 13:32:57 +00:00
jesopo
6d2c15ed2c Don't eat numbers after color formatting if they'd end up making the color code
`20` or more
2018-11-25 13:23:00 +00:00
Evelyn
8cd7393d17 Regression: Don't connnect if a server's 'connect' setting is false 2018-11-24 12:14:36 +00:00
jesopo
d606944648 Move self.name = self.nickname_lower to under setting self.nickname_lower,
otherwise `self.name` will be `""`
2018-11-23 13:55:40 +00:00
jesopo
3061c65024 IRCServer.Server.get_user should be 'typing.Optional[IRCUser.User]', not just
'IRCUser.user'
2018-11-21 20:18:12 +00:00
jesopo
5001e47af9 typo in src/IRCServer.py, 'typing.float' -> 'float' 2018-11-21 20:17:02 +00:00
jesopo
9ecbb6be7b Fix mypy issues caused by overwriting a bytes variable with a str object 2018-11-21 20:16:07 +00:00
jesopo
bab4fca287 Add more return type annotations to src/IRCServer.Server 2018-11-21 20:13:56 +00:00
jesopo
9a5ba99840 Add some missing return type annotations in src/IRCServer.Server 2018-11-21 20:05:21 +00:00
jesopo
2852afd5f7 Add IRCServer.Server.get_target, to get an IRCChannel if the given target is a
channel name or an IRCUser
2018-11-21 20:04:07 +00:00
jesopo
60acf02cee prefix should be a Optional[IRCHostmask], we shouldn't use Optional[] as a
compile-time object (utils.irc)
2018-11-20 17:23:47 +00:00
jesopo
549c12da10 Clarify typing in src/IRCChannel.py 2018-11-20 14:08:36 +00:00
jesopo
5d813175a1 Don't enable write throttling until we get 005 2018-11-19 10:12:52 +00:00
jesopo
f46015d9d8 Minor code styling change in urils.irc 2018-11-17 12:48:56 +00:00
jesopo
756c543c32 Typo in utils.__init__, 'number' -> 'number_str' 2018-11-16 17:45:40 +00:00
jesopo
8300c84f6a Log event timing in 1 message, not 2 2018-11-14 23:08:39 +00:00
jesopo
ae8aeaeef4 Typo in src/Database.py, 'total_millisecons' -> 'total_milliseconds' 2018-11-14 23:06:41 +00:00
jesopo
1ec6d0ad40 Log query timing in src/Database.py in 1 line, not 2 2018-11-14 23:04:54 +00:00
jesopo
1297901dca We do indeed need to see "\x03" even when there's no foreground/background
(color reset)
2018-11-14 22:50:04 +00:00
jesopo
2fc948ab24 Don't eat commas when there's no background color or when a comma directly
follows a background color
2018-11-14 22:35:13 +00:00
jesopo
81e1f11872 Missed a 'message' -> 'ctcp_message' 2018-11-14 22:13:31 +00:00
jesopo
1380f6c534 Typo in utils.irc, 'message' -> 'ctcp_message' 2018-11-14 22:10:45 +00:00
jesopo
19b195eb1d Stop supporting using ansi bold for brightening colors, support ansi background
colors
2018-11-14 22:07:34 +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
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
f7872fac43 Typo in src/utils/irc.py, 'resplace' -> 'replace' 2018-11-14 13:16:11 +00:00
jesopo
99c2147512 Don't assume a reconnect timer event will always have connection_params 2018-11-14 13:08:57 +00:00
jesopo
76d9face44 You can join color and bold in to one \033 ansi sequence 2018-11-14 12:19:31 +00:00
jesopo
0e499a4078 Support irc format full reset (\x0F) as ansi reset (\033[0m) 2018-11-14 12:13:08 +00:00
jesopo
bbcde2d1d5 Use extended ANSI colors to avoid using bold to make colors lighter 2018-11-14 11:47:15 +00:00
jesopo
2fcde64bfd 'ANSI_RESET' -> 'ANSI_BOLD_RESET' typo, 'ansi_bold' -> 'color_bold'
clarification, fix issue in color tokenizing that caused bolds to be put in the
wrong place
2018-11-14 11:44:56 +00:00
jesopo
bcdbb3640c Add type annotions to irc->ansi color functions 2018-11-14 10:28:38 +00:00
jesopo
00eb4027ec Only reset ansi bolding when both color-bold and bold are false 2018-11-14 08:09:01 +00:00
jesopo
e5f068f660 Bold reset is 22, not 21 2018-11-13 18:19:37 +00:00
jesopo
5c6aa87470 Fix bolding/unbolding code in utils.irc 2018-11-13 18:05:25 +00:00
jesopo
d18d28f0a2 Apparently '39' is 'font reset' for ansi colors 2018-11-13 17:53:37 +00:00
jesopo
f1b54efe77 Visual tweak; align "="s in utils.consts 2018-11-13 17:43:00 +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
7918f9cc4e Better constifying of COLORs 2018-11-13 17:23:18 +00:00
jesopo
8b9062b942 Better constifying of color/font chars 2018-11-13 16:02:26 +00:00
jesopo
16c4e1bfc6 I was accidentally removing two characters from the start of :nick!user@host 2018-11-13 15:04:11 +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
e9c9ec778c Add .keys()/.values()/.items to src/IRCChannels.py 2018-11-13 11:36:44 +00:00
jesopo
36048be2fb That shouldn't be there 2018-11-13 11:36:28 +00:00
jesopo
66643a1bd8 Return new user's id in Database.users.add 2018-11-13 11:19:43 +00:00
jesopo
8fc7a7652a Return new server_id from Database.servers.add 2018-11-13 11:13:04 +00:00
jesopo
73c0c911d4 Move logic for adding a server to the database out to utils.cli and add a
--add-server flag for start.py, to add new server
2018-11-13 10:40:49 +00:00
jesopo
20b1e8b800 Remove unneeded const 2018-11-12 17:14:38 +00:00
jesopo
2747999ca6 We don't need utils.irc.remove_colon anymore! 2018-11-12 17:13:49 +00:00
jesopo
8b135d8310 Add type annotionations to src/Timers.py and src/IRCBuffer.py 2018-11-11 19:12:59 +00:00
jesopo
db1e2ea406 Add missing imports and Channel namespacing to src/IRCChannel.py 2018-11-11 16:11:45 +00:00
jesopo
a9b6086c70 Split out Channels in to IRCChannels.Channels, not IRCChannel.Channels 2018-11-11 14:53:16 +00:00
jesopo
0f53d2e828 Fix type annotations for utils.parse.keyvalue 2018-11-11 14:43:31 +00:00
jesopo
6bb03c4519 Don't implicitly create channels, explicitly create channels when we join one 2018-11-11 13:03:54 +00:00
jesopo
e29cc1c52c Implement __len__ on src/IRCChannel.py.Channels 2018-11-11 12:52:30 +00:00
jesopo
4e06a52bd9 Copypaste fail in src/IRCChannel.py, 'self.id' -> 'self._server.id' 2018-11-11 12:49:34 +00:00
jesopo
f6a997e3b9 Copypaste fail in src/IRCChannel.py, 'self.bot' -> 'self._bot' 2018-11-11 12:48:30 +00:00
jesopo
e133401ed9 Copypaste fail in src/IRCChannel, 'get_channel_id' -> '_get_id' 2018-11-11 12:47:02 +00:00
jesopo
32dccc65e0 Typin in src/IRCChannel.py, 'self._add' -> 'self.add' 2018-11-11 12:46:14 +00:00
jesopo
8eef9a612d Readd line I accidentally removed in src/Database.py 2018-11-11 12:45:10 +00:00
jesopo
245c4599dd Typo in src/IRCChannel.py, 'Iterable' -> 'typing.Iterable' 2018-11-11 12:43:39 +00:00
jesopo
0248c7503a Forgot to import EventManager in src/IRCChannel.py 2018-11-11 12:43:11 +00:00
jesopo
44393a3170 Add missing ":" in src/IRCChannel.py 2018-11-11 12:41:31 +00:00
jesopo
c84205ed9b Add a threading.Lock() around cursor.execute(...) in Database.py 2018-11-11 12:40:24 +00:00
jesopo
2816fe67bb Move channel tracking data/functions to src/IRCChannel.Channels 2018-11-11 12:34:22 +00:00
jesopo
4bab1aea30 Add a way to more explicitly denote when a CAP handshake has ended early 2018-11-09 10:43:05 +00:00
jesopo
a2292eb439 Filter out empty items in utils.parse.keyvalue 2018-11-08 22:41:30 +00:00
jesopo
3ff68dc427 Support passing unrestricted args between connections 2018-11-08 17:09:07 +00:00
jesopo
6bf6905262 Keep a track of bytes written and read per server 2018-11-08 13:31:05 +00:00
jesopo
26a16a7762 Keep a dict of isupport key:values on IRCServer.Server 2018-11-08 12:34:30 +00:00
jesopo
03cae696c1 Technically, we only need to unescape non-json message-tag *values* 2018-11-08 11:52:53 +00:00
jesopo
0c6d54f5fd Only mesage-tag unescape non-json tags after we split on ";" 2018-11-08 11:43:32 +00:00
jesopo
729d1424ed Unescape message-tags as per spec Escaping Rules 2018-11-08 11:37:23 +00:00
jesopo
5e7b335d04 Fix issues that were introduced in message-tag parsing when I added support for
JSON message tags
2018-11-08 11:13:24 +00:00
jesopo
3d00a1e15a Explicitly denote when an :arbitrary arg is present in an IRCLine 2018-11-08 10:36:40 +00:00
jesopo
dccb460e5c 'rename_channel' -> 'rename' in src/Database.channels 2018-11-05 21:39:00 +00:00
jesopo
0a70fda6dc Don't pass connection_params through to reconnect in normal circumstances 2018-11-05 20:51:51 +00:00
jesopo
ce3b319bee Only automatically reconnect to a server when we don't already have a server
with the same ID (to make reconnection work)
2018-11-05 20:33:45 +00:00
jesopo
3cb9baeec3 Cache a server fileno from connect onwards, like we used to 2018-11-05 20:33:30 +00:00
jesopo
e2c806ffe4 Typo in IRCServer, 'nicknamme' -> 'nickname' 2018-11-05 20:18:22 +00:00
jesopo
9571c3f9fa Update IRCServer.__repr__ to use connection_params 2018-11-05 20:18:06 +00:00
jesopo
afce01d0f8 Fall back to nickname for username/realname, as it used to be 2018-11-05 20:08:55 +00:00
jesopo
8b1e1fbb2e Clarify typing of .nickname/.nickname_lower/.name in IRCUser 2018-11-05 18:37:15 +00:00
jesopo
d63115440d Fix the order of some connection params, add alias as a seperate argument to
IRCServer.Server
2018-11-05 18:30:39 +00:00
jesopo
6b8593a09b Pass connection parameters around in their own object (IRCConnectionParameters) 2018-11-05 18:23:02 +00:00
jesopo
d92fc7f6b8 Add missing import of json in utils.irc 2018-11-05 17:44:21 +00:00
jesopo
0676b7b0db Call Database.channels.rename in IRCServer.Server.rename_channel 2018-11-05 16:47:47 +00:00
jesopo
055390e220 Add Database.channels.rename, as part of support for IRCv3's RENAME 2018-11-05 16:46:24 +00:00
jesopo
4936b91273 Support JSON messages tags, as per IRCv'3 message-tags-0.3 #318 pull request 2018-11-05 15:15:08 +00:00
jesopo
aaf0c8cf2a Reschedule STS expiration on disconnect 2018-11-05 14:12:21 +00:00
jesopo
6ca8017966 Give Logging.Log object to modules 2018-11-05 12:38:40 +00:00
jesopo
10130d7288 I forgot the "normal" event hook syntax! 2018-11-05 12:34:18 +00:00
jesopo
86bbd370fb 'self.events' -> 'self._events' in IRCBot 2018-11-05 12:29:13 +00:00
jesopo
c3f654673a Cache socket fileno in IRCServer.Server just before disconnecting 2018-11-05 12:27:30 +00:00
jesopo
fa3fc7e3fb @utils.hook doesn't work outside of modules! 2018-11-05 12:27:11 +00:00
jesopo
fcedc434f2 it should be self.bindhost, now that we've moved the logic to .connect() instead
of __init__
2018-11-05 12:18:30 +00:00
jesopo
1065bba3ef Typo in src/IRCServer.py; 'self.AF_INET' -> 'socket.AF_INET' 2018-11-05 12:16:30 +00:00
jesopo
7cc6b559be Clarify items and var_items typing in src.utils.parse 2018-11-05 11:56:52 +00:00
jesopo
9c233cd4dd Add src.utils.parse.keyvalue, mostly for IRCv3 CAP negotiation 2018-11-05 11:56:28 +00:00
jesopo
c2ebc7b5e4 Refactor IRCServer .connect() logic 2018-11-05 11:53:33 +00:00
jesopo
66ee3ce5f1 Add __repr__ to utils.irc.IRCArgs 2018-11-05 10:03:20 +00:00
jesopo
c1e9825a33 Don't set args to a split of the data left over when parsing out a command if
there's not a space after the command
2018-11-04 17:23:34 +00:00
jesopo
1610cfb499 Implement utils.irc.IRCArgs.__len__ 2018-11-04 17:06:50 +00:00
jesopo
b8e3cdb075 Fix typo in utils.irc, 'self_args' -> 'self._args' 2018-11-04 17:04:16 +00:00
jesopo
52aa8a51a6 Move definition of IRCArgs above IRCLine 2018-11-04 17:03:01 +00:00
jesopo
e1d261bda0 Fix typo in utils.irc 2018-11-04 17:01:50 +00:00
jesopo
58363895f1 Change line parsing to put arbitrary-length args on the end of
`args` so we can get rid of `last`/`arbitrary` and add IRCArgs (with .get())
to help only getting an arg index if it exists
2018-11-04 15:37:06 +00:00
jesopo
6d742f6a74 Implement IRCv3's draft/rename 2018-11-04 14:48:55 +00:00
jesopo
9fe7815c17 utils.irc.color should take int for foreground/background, not str 2018-11-02 13:14:42 +00:00
jesopo
5b27ccb551 Add src/__init__.py to allow mypy to see src/ as a module 2018-11-02 11:51:13 +00:00
jesopo
a4d8d1f855 Fix some non-explicit None returns, add type hints to important variables 2018-10-31 15:12:46 +00:00
jesopo
7d54bd6ad0 Move setting BitBotFormatter's converter (to time.gmtime) to class definition as
it's not technically correct to overwrite a funcion on an existing object
2018-10-30 18:03:44 +00:00
jesopo
b543e31cd2 Fix/refactor issues brought up by type hint linting 2018-10-30 17:49:35 +00:00
jesopo
d0e3574227 Typo in src/Exports; 'self_exports' -> 'self.exports' 2018-10-30 16:28:39 +00:00
jesopo
e07553c362 Add type/return hints throughout src/ and, in doing so, fix some cyclical
references.
2018-10-30 14:58:48 +00:00
jesopo
50e7aa40b9 Typo in utils.parse_docstring, 'multiple_items' -> 'var_items' 2018-10-28 11:53:44 +00:00
jesopo
857761a653 Support multiple items for docstring kwargs in utils.parse_docstring 2018-10-28 11:43:41 +00:00
jesopo
3094bb7748 Specifically handle OSError (e.g. Network is unreachable) as a disconnect 2018-10-26 11:30:16 +01:00
jesopo
d3231e3282 signal.signal timer callback takes 2 args 2018-10-25 14:09:19 +01:00
jesopo
4d3ff60205 Update src/IRCUser.py.send_notice to take a prefix kwarg 2018-10-25 12:15:12 +01:00
jesopo
8ea6db9422 Standardise "Failed to load results" errors! 2018-10-20 20:53:24 +01:00
jesopo
6bcfcb60ea Some networks allow you to remove user modes that don't exist e.g. removing +o
from someone that doesn't have it. wtf.
2018-10-18 21:07:08 +01:00
jesopo
751aaa3365 Add missing return in src/IRCServer.py.get_user_setting 2018-10-18 17:16:23 +01:00
jesopo
4796d4264c Print lines not [lines] in src/IRCBot.py 2018-10-17 17:36:01 +01:00
jesopo
c48574a3d6 "Cannot" -> "can't" in IRCServer encoding fallback 2018-10-17 17:04:56 +01:00
jesopo
a4bfae9557 TRACE log when we have to use fallback encoding 2018-10-17 16:54:33 +01:00
jesopo
6c6d593e6d Only log exceptions when they're not unsafe 2018-10-16 14:53:37 +01:00
jesopo
ba3cd00c78 Add utils.EventError, utilise it for stderr in commands.py/coins.py 2018-10-16 14:47:01 +01:00
jesopo
743b3bc754 event["args"] is an array already, args_split does not exist. Also send raw
events from src/IRCServer.py as call_unsafe to make errors like that more
apparent.
2018-10-15 14:29:16 +01:00
jesopo
40ffb6ce0e Typo in src/IRCServer.py, 'defau;t' -> 'default' 2018-10-14 14:31:30 +01:00
jesopo
0ed0b235e9 Work directly from users in modules/coins.py.interest(), so as to not give
double-interest to two "users" online at the same time sharing the same identity
2018-10-14 14:30:19 +01:00
jesopo
43d026cc9d Typo in src/Timers.py, 'conteext' -> 'context' 2018-10-13 09:16:53 +01:00
jesopo
5e3399f73e Actually, don't give contexts to timers that aren't contextual. (e.g. pesistent
timers)
2018-10-13 09:10:26 +01:00
jesopo
33921a8912 Timers._add takes a "context" param 2018-10-13 09:09:51 +01:00
jesopo
64cc1bf16c a Timer object can have a context yet not be a contextual timer 2018-10-13 09:09:24 +01:00
jesopo
561d686643 Correctly remove contextual timers from src/Timers.py 2018-10-13 01:13:14 +01:00
jesopo
0a93e76333 Use Timers.get_timers() instead of Timers.timers 2018-10-12 18:15:22 +01:00
jesopo
819f4e0680 Pass context-wrapped timers to each module, add ModuleManager.BaseModule.on_load 2018-10-12 18:07:23 +01:00
jesopo
cb94fa9ae4 Add TimersContext, to be able to purge timers when modules are unloaded 2018-10-12 17:54:15 +01:00
jesopo
d460375629 Use decimal.Decimal in utils.parse_number 2018-10-12 11:28:14 +01:00
jesopo
d427e29936 Actually pass format args to ValueErrors in utils.parse_number 2018-10-12 11:21:57 +01:00
jesopo
a810d273d1 int(number) after we've checked .isdigit() in utils.parse_number 2018-10-12 11:19:04 +01:00
jesopo
9771fc9f7a Add utils.parse_number, to turn 1k/1m/1b in to 1_000/1_000_000/1_000_000_000 2018-10-12 11:16:39 +01:00
jesopo
e6a55b2b22 Improve "non-complete line" TRACE log 2018-10-11 18:07:11 +01:00
jesopo
dceed3d439 TRACE log when we receive and buffer a non-complete line 2018-10-11 17:56:19 +01:00
jesopo
23b7223fae Add !syncmodes in modules/auto_mode.py, fire internal.identified in
modules/permissions.py and catch it in modules/auto_mode.py to give users modes
when they identify using the internal identity mechanism
2018-10-11 11:20:53 +01:00
jesopo
c655668bbe Add fallback_encoding to utils.http.get_url, in case a page has no implicit
encoding
2018-10-10 23:49:59 +01:00
jesopo
f286f3bf48 .decode data prior to json.loads in utils.http.get_url 2018-10-10 15:25:08 +01:00
jesopo
951c315cec Fix syntax error for throwing a timeout when signal.alarm fires 2018-10-10 15:07:04 +01:00
jesopo
015fa8ddff .decode plaintext returns from utils.http.get_url 2018-10-10 15:06:30 +01:00
jesopo
5b9ffe013d Use signal.alarm to Deadline utils.http.get_url and throw useful exceptions 2018-10-10 14:25:44 +01:00
jesopo
be75f72356 Set a max size of 100mb for utils.http.get_url 2018-10-10 14:05:15 +01:00
jesopo
68f5626189 Change utils.http to use requests 2018-10-10 13:41:58 +01:00
jesopo
c28a41ad21 Remove debug print in src.utils.http 2018-10-09 22:39:34 +01:00
jesopo
f69a1ce7c1 Return response code from utils.http.get_url when code=True and soup=True 2018-10-09 22:16:04 +01:00
jesopo
b144d5e37e Don't continue trying to use None data 2018-10-08 23:03:49 +01:00
jesopo
383767c7fb Support post_data in utils.http.get_url 2018-10-08 12:43:31 +01:00
jesopo
681866339c Support multiple types of comments in utils.get_hashflags 2018-10-07 11:24:13 +01:00
jesopo
29d8549da1 clear _trigger_functions after we've called all the waiting functions 2018-10-07 08:06:41 +01:00
jesopo
a77a985d5d Optionally take a function in IRCBot.trigger, a function to be called on the
main thread
2018-10-07 08:01:54 +01:00
jesopo
472d745401 Socket on_read functions take 2 args (socket, string) 2018-10-07 07:56:11 +01:00
jesopo
bb533ab9e8 This is a far less complicated way of triggering epoll.poll 2018-10-07 07:54:10 +01:00
Evelyn
661199aa54 Research suggests _config and config are not synonymous 2018-10-06 22:58:59 +01:00
jesopo
825fb15c87 Add control-socket to bot.conf.example, only start up control socket is a unix
domain socket location is provided
2018-10-06 18:31:00 +01:00
jesopo
9458d9fee2 'control_socket_client' -> '_control_client' in src/IRCBot.py 2018-10-06 16:42:38 +01:00
jesopo
90680c11ef Remove debug print in src/ControlSocket.py 2018-10-06 15:46:58 +01:00
jesopo
79aff93b5d Add a ControlSocket client to IRCBot.py, use it to trigger the epoll loop when a
github webhook has been caught!
2018-10-06 15:45:56 +01:00
jesopo
0794a5173a Add a way to track non-IRC sockets within the main epoll loop; use this for a
unix domain control socket!
2018-10-06 15:37:05 +01:00
jesopo
df94020ef5 Add database.find_by_setting, send github commits to interested channels 2018-10-06 09:54:21 +01:00
jesopo
60ec6fe2db 'ssl-certificate'/'ssl-key' -> 'tls-certificate'/'tls-key' 2018-10-05 23:01:12 +01:00
jesopo
096fd05cee Typo in utils, 'line.replace[3:]' -> 'line[3:]' 2018-10-04 16:01:34 +01:00
jesopo
f2d9ff9d3b Checking for the presence of the seperator in the return from .partition is a
more "correct" way of doing this
2018-10-04 15:27:52 +01:00
jesopo
feed251f82 Non-present hashflag values should be None, not empty string 2018-10-04 15:23:35 +01:00
jesopo
8d3255c46d Simplify hashflag parsing 2018-10-04 15:22:09 +01:00
jesopo
c0fbe963a5 Try calling module.unload() (if it exists) when unloading a module 2018-10-04 14:45:32 +01:00
jesopo
72602e13f9 IRCChannel.send_part should have a self param! 2018-10-04 14:45:14 +01:00
jesopo
b00819d581 self.lock.acquire() should be after epoll.poll has returned 2018-10-04 14:44:50 +01:00
jesopo
75f25db4cd Move 'top 10' logic to utils, add !wordiest to modules/words.py 2018-10-04 05:33:15 +01:00
jesopo
934ee7bf8e Typo in src/IRCChannel.py. 'del self.user_modes' -> 'del self.user_modes[user]' 2018-10-04 04:41:28 +01:00
jesopo
ce2231900d Print user status symbols in modules/print_activity.py 2018-10-03 16:44:44 +01:00
jesopo
98207be7b1 'mode_prefixes' -> prefix_modes and prefix_symbols 2018-10-03 16:44:00 +01:00
jesopo
6c1ac52fde Use docstring key, not value, as a key. 2018-10-03 16:00:53 +01:00
jesopo
0a5aef09b4 Fix start.py not giving the right arguments to database.servers.add 2018-10-03 16:00:25 +01:00
jesopo
69d58eede2 Move src/Utils.py in to src/utils/, splitting functionality out in to modules of
related functionality
2018-10-03 13:22:37 +01:00
jesopo
760c9d8844 Add a way to not add a user automatically in IRCServer.get_user 2018-10-03 11:32:31 +01:00
jesopo
2b349105aa Move parsing IRC lines to src/Utils.py, added base support for parsing outgoing
messages
2018-10-03 11:31:51 +01:00
jesopo
9118af5e9c Support changing command responses from PRIVMSG to NOTICE 2018-10-02 21:40:34 +01:00
jesopo
74180cb103 Simplify Utils.seperate_hostmask 2018-10-02 17:59:33 +01:00
jesopo
59a5d1283a Make use of str.partition in Utils.parse_docstring 2018-10-02 17:47:28 +01:00
jesopo
362bbf89f7 ... actually add src/IRCObject.py to git. that should have been present many
commits ago.
2018-10-02 15:16:20 +01:00
jesopo
150788c6c6 Add !leave to modules/channel_op.py 2018-10-02 14:55:12 +01:00
jesopo
976b6ae335 Better support for msgtags with PRIVMSGs; put functionality in to
modules/commands.py to reply to specific messages by use of msgids
2018-10-01 17:26:31 +01:00
jesopo
3201f198da EventHook._call takes 3 args 2018-10-01 16:33:04 +01:00
jesopo
cf83c310dd Change trace logging level from 5 to logging.DEBUG-1 2018-10-01 16:04:41 +01:00
jesopo
7eb31820d7 Add call_unsafe functions to EventManager.EventHook, to not swallow errors on
specific function calls (e.g. preprocess.command)
2018-10-01 16:04:06 +01:00
jesopo
6af738107b Implement client-side bindhost 2018-10-01 14:06:50 +01:00
jesopo
59243f492f Implement src/IRCObject.py to convert specific objects in to strings when
passing them to modules/scripts.py scripts
2018-10-01 13:48:55 +01:00
jesopo
120acf54ec Add 'trace' logging level for src/Database.py and src/EventManager.py very
verbose debugging
2018-10-01 13:48:22 +01:00
jesopo
416d744291 Log remaining referrers to a module when it's unloaded 2018-09-30 20:12:28 +01:00
jesopo
43740d40f4 Add modules/strip_color.py 2018-09-30 20:12:11 +01:00
jesopo
c87728a87d Move src/IRCLineHandler.py to modules/line_handler.py 2018-09-30 19:43:20 +01:00
jesopo
1f2c2b719b Cache._items is a {id: [item, timeout]} dict, not {id: item} 2018-09-30 18:00:23 +01:00
jesopo
10ef985a8a Switch to using docstring for usage, permission and require_mode 2018-09-30 17:29:09 +01:00
jesopo
16dc2c39a9 Refactor modules/channel_op.py and add !tempban/!tempkickban 2018-09-30 13:28:26 +01:00
jesopo
63fc39e448 Use a zero-width non-joiner to prevent highlights, instead of a zero-width
joiner
2018-09-29 15:57:15 +01:00
jesopo
bcb67db3fd Add !reloadscripts to modules/scripts.py 2018-09-29 15:05:50 +01:00
jesopo
fe981f9911 Actually get "item" when a cached item expires 2018-09-29 13:37:19 +01:00
jesopo
47ec11bbef Add src/Cache.py, use it in modules/coins.py 2018-09-29 12:53:39 +01:00