Commit graph

474 commits

Author SHA1 Message Date
jesopo
0eaeca8f83 Put spaces between units in output from utils.to_pretty_time 2019-03-21 17:59:42 +00:00
jesopo
10ca8a1219 Add IRCUser.hostmask() to format nick/user/host in to a hostmask 2019-03-12 10:39:54 +00:00
jesopo
5d7f017c9c Enum values shouldn't be all upper case 2019-03-10 13:14:25 +00:00
jesopo
1fcbdd305c 'failed to connect' log line needs 2 "%s"s 2019-03-09 20:21:15 +00:00
jesopo
5c5b4ef139 Handle negative (end-relative) indexes being given to IRCArgs.get 2019-03-08 23:35:52 +00:00
jesopo
f1348e5679 Handle IRCArgs being empty strings (e.g. 'PRIVMSG #test :') 2019-03-08 23:23:09 +00:00
jesopo
b3472c009a Only log exception message, not full stacktrace, when a connect fails 2019-03-08 10:12:01 +00:00
jesopo
6b59830a6e Only print ANSI reset characters when appropriate 2019-03-06 21:48:31 +00:00
jesopo
1b7a8bc896 Log content of lines that need fallback encoding 2019-03-06 17:19:37 +00:00
jesopo
c842c459f4 Specifically only catch UnicodeDecodeError in IRCSocket.read 2019-03-06 17:02:58 +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
b43a5a7c74 Add -N to start.py to disable to-file logging 2019-03-04 19:35:18 +00:00
jesopo
7a3db82300 Add IRCServer.has_capability and use it throughout line_handler 2019-03-03 22:38:34 +00:00
jesopo
197ae2e053 Raise a specific exception in utils.http.request for "wrong content type" 2019-02-28 23:28:45 +00:00
jesopo
948c86adbc Need to str() Hostmask objects in ParsedLine.format() 2019-02-28 16:22:17 +00:00
jesopo
9335ca5d16 Treat both a and a= as None for message-tags 2019-02-27 22:20:01 +00:00
jesopo
d16046fb49 Simplify ParsedLine._tag_str and ParsedLine.format() 2019-02-27 22:14:53 +00:00
jesopo
846b881e52 Throw ValueError when utils.http.request tries to soup non-html/xml data 2019-02-27 15:16:08 +00:00
jesopo
cfaf6864fc Don't try to parse non-html/xml stuff with BeautifulSoup 2019-02-26 11:18:50 +00:00
jesopo
5aaf6eb7df Bump version to v1.2.1 2019-02-25 21:47:36 +00:00
jesopo
56f6511ad3 Critical security fix: truncate IRCLine.ParsedLine.format() at newline 2019-02-25 21:46:23 +00:00
jesopo
d627ed49e2 Pull "is main thread" logic out to utils, force Database to be accessed on main
thread
2019-02-25 10:36:17 +00:00
jesopo
faa305f2e8 Add -m/-M args to ./start.py that call command_line on individual modules 2019-02-24 10:43:46 +00:00
jesopo
276d753711 Change --verbose short to -V, add --version/-v, add IRCBot.VERSION 2019-02-24 08:37:42 +00:00
jesopo
8d55319f56 Rename IRCLine.Line to IRCLine.SentLine, for clarity 2019-02-24 08:25:12 +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
5baa688fbc Make IRCArgs mutable 2019-02-23 21:39:46 +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
c6699c509e .upper() command in IRCParsedLine.format() 2019-02-23 16:11:26 +00:00
jesopo
54218b747f Only allow the last arg of a formatted line to be :trailing 2019-02-23 16:07:20 +00:00
jesopo
8b54046ca4 Add target typehint on IRCServer.send_tagmsg, add send_tagmsg to IRCChannel/IRCUser 2019-02-22 22:34:54 +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
8a0fd009e4 Also unload submodules within packages (ModuleManager.py) 2019-02-22 17:58:53 +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
62eab40968 Revert "Treat both a and a= as having a value of None in message-tags (utils.irc)"
This reverts commit e7ec4b5716.
2019-02-21 07:29:19 +00:00
jesopo
e7ec4b5716 Treat both a and a= as having a value of None in message-tags (utils.irc) 2019-02-20 22:26:31 +00:00
jesopo
deedab7248 Add IRCServer.send_joins, a nicer interface than manually ",".joining 2019-02-20 17:08:30 +00:00
jesopo
ddb69685d3 again, r"\" isn't valid. 2019-02-20 16:53:40 +00:00
jesopo
e343bf3e6a Check throttle space when queueing more data not whether there's no queued data 2019-02-20 16:52:45 +00:00
jesopo
98215f66eb r"\" isn't valid - use "\\" (utils.irc) 2019-02-20 16:52:14 +00:00
jesopo
c1881fbafb Remove '\' from post-unescaped message-tags 2019-02-20 16:34:14 +00:00
jesopo
47841ed154 don't replace '\\' with '\\' with message-tag unescape 2019-02-20 16:33:48 +00:00
jesopo
81d82413d4 draft/message-tags-0.3 (JSON tags) was rejected 2019-02-20 14:46:40 +00:00
jesopo
577fae7cea Don't pass None around as tag default, fix some missing return type args 2019-02-19 15:57:00 +00:00
jesopo
3f8ac871ed typo, 'utls' -> 'utils' (utils.irc) 2019-02-19 15:44:23 +00:00
jesopo
114d1054a5 Add .message( and .notice( to IRCSendBatch 2019-02-19 15:41:17 +00:00
jesopo
bc772ef5cc Default IRCParsedLine.tags to empty dict, not None 2019-02-19 15:40:56 +00:00
jesopo
53e5a7fe7e contextualise JOIN key check, otherwise it doesn't send channel_name 2019-02-19 09:32:17 +00:00
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