jesopo
|
055eed24fd
|
Type annotate ParsedLine.tags, add ParsedLine.add_tag()
|
2019-06-16 09:52:25 +01:00 |
|
jesopo
|
8ab4880c5c
|
Change from yield checks to a func in events that pass up EventErrors
|
2019-06-15 18:42:14 +01:00 |
|
jesopo
|
b5a467552f
|
CRITICAL log exceptions caught in _loop_catch()
|
2019-06-15 00:39:52 +01:00 |
|
jesopo
|
e0d99fe8b1
|
Fix utils.Check args type hinting
|
2019-06-14 12:12:38 +01:00 |
|
jesopo
|
f05fc209b0
|
Add a way to __or__ utils.Check s, as a "if one of these passes" thing
|
2019-06-14 12:01:55 +01:00 |
|
jesopo
|
d7fa2cfa24
|
Catch yield s in command callbacks for e.g. permission checks
|
2019-06-14 11:42:12 +01:00 |
|
jesopo
|
0e5ba747a9
|
Wrap _read_loop() and _write_loop() in a try that kills the main thread
|
2019-06-13 17:11:46 +01:00 |
|
jesopo
|
795f6afbeb
|
Mode mode (and mode arg) parsing to IRCChannel.py, add IRCChannel.mode_str
|
2019-06-13 11:53:47 +01:00 |
|
jesopo
|
8135f871c3
|
Change send_*() function return hints to be typing.Optional
|
2019-06-10 15:02:03 +01:00 |
|
jesopo
|
6c5dc958d0
|
Add .assure() to ParsedLine, to make it immune from .valid()
|
2019-06-10 10:45:02 +01:00 |
|
jesopo
|
0fc03fd592
|
Allow preprocess.send callbacks to request a line not be sent at all
|
2019-06-10 10:11:31 +01:00 |
|
jesopo
|
512d844a5a
|
Update CHANGELOG, v1.9.2 release
|
2019-06-09 17:34:45 +01:00 |
|
jesopo
|
a31793c851
|
Put responsbility of self.running = False on to the event loop
|
2019-06-09 14:59:28 +01:00 |
|
jesopo
|
e28a8d91ab
|
IRCServer.statusmsg type hint
|
2019-06-08 12:10:14 +01:00 |
|
jesopo
|
55fb9cee3b
|
v1.9.1 release
|
2019-06-08 11:03:18 +01:00 |
|
jesopo
|
d4ba98307f
|
We should look at ISUPPORT's STATUSMSG token instead of PREFIX
|
2019-06-08 10:59:52 +01:00 |
|
jesopo
|
16b9361371
|
Only request a CAP once. closes #66
|
2019-06-08 10:17:13 +01:00 |
|
jesopo
|
37c74da0f8
|
v1.9.0 release
|
2019-06-07 17:13:53 +01:00 |
|
jesopo
|
f822345976
|
Merge branch 'master' into feature/write-thread
|
2019-06-07 15:07:31 +01:00 |
|
jesopo
|
accd7a8941
|
Logging._log()'s params arg should be typing.Optiona[]
|
2019-06-07 13:35:20 +01:00 |
|
jesopo
|
ea924df883
|
typehint for IRCBuffer._lines
|
2019-06-07 13:34:30 +01:00 |
|
jesopo
|
bc4a6debb5
|
Use a deque for temp chathistory storage (src/IRCBuffer.py)
|
2019-06-07 13:31:51 +01:00 |
|
jesopo
|
38a41a6404
|
We need to wait for _check to finish so read/writes can be triggered correctly
|
2019-06-07 11:05:55 +01:00 |
|
jesopo
|
09fbbae5e3
|
"send" event on SentLines should be run on the main thread
|
2019-06-07 11:05:43 +01:00 |
|
jesopo
|
b3b4d07e63
|
Call _check *after* read epoll call - to make sure timeouts are hit accurately
|
2019-06-07 10:39:31 +01:00 |
|
jesopo
|
f3b6d6df0a
|
Switch to using threading.Condition to trigger write thread
|
2019-06-07 10:39:19 +01:00 |
|
jesopo
|
1f1b63ea6d
|
Checking if we should enable write buffer should be in _fill_throttle()
|
2019-06-07 08:02:22 +01:00 |
|
jesopo
|
c89bd74a48
|
select.poll, as opposed to select.epoll, uses milliseconds not seconds for
timeout
|
2019-06-06 23:45:33 +01:00 |
|
jesopo
|
23d2993b9f
|
Remove debug print
|
2019-06-06 23:25:03 +01:00 |
|
jesopo
|
6d44f12193
|
Use .trigger (without triggering read/write threads) to call _check
|
2019-06-06 23:23:46 +01:00 |
|
jesopo
|
24ca7ed97f
|
use trigger_write() instead of a raw .send(b"")
|
2019-06-06 23:19:57 +01:00 |
|
jesopo
|
ef0c2c65e0
|
use _event_queue for _check, don't .disconnect() from outside of respective
loops
|
2019-06-06 22:36:56 +01:00 |
|
jesopo
|
ae6c65d743
|
remove _trigger_function code, it's not used any more
|
2019-06-06 21:43:21 +01:00 |
|
jesopo
|
d9de4fdec2
|
Lambda scopes are irritating
|
2019-06-06 21:03:25 +01:00 |
|
jesopo
|
539bebafea
|
select.epoll -> select.poll
|
2019-06-06 20:26:05 +01:00 |
|
jesopo
|
0f7b040165
|
call timer callbacks and expire cach objects on main thread
|
2019-06-06 20:22:56 +01:00 |
|
jesopo
|
5b7d8dea91
|
Only trigger read/write threads once
|
2019-06-06 19:21:18 +01:00 |
|
jesopo
|
05fcb33ff7
|
print lines as soon as they're read, don't wait for _post_send
|
2019-06-06 19:15:34 +01:00 |
|
jesopo
|
f96378ac07
|
move immediate-write-trigger to IRCServer.py, trigger _event_loop for
running=False
|
2019-06-06 17:58:35 +01:00 |
|
jesopo
|
35b97f836a
|
Merge branch 'master' into feature/write-thread
|
2019-06-06 17:20:30 +01:00 |
|
jesopo
|
59eeee1030
|
message-tags are joined by ";", not ","
|
2019-06-06 17:19:27 +01:00 |
|
jesopo
|
a1ebe8035e
|
Split read/write/process in to 3 different threads
|
2019-06-06 17:05:44 +01:00 |
|
jesopo
|
2ca4fd48f7
|
Make params arg for logging functions optional
|
2019-06-06 12:59:47 +01:00 |
|
jesopo
|
eb7d90bb00
|
message_tag_escape() message-tag values when .format()ing IRCLine
|
2019-06-06 09:29:17 +01:00 |
|
jesopo
|
8fe5098739
|
Make 'circular dependency' WARN more explicitly about 1-to-1 dependencies
|
2019-06-05 19:13:44 +01:00 |
|
jesopo
|
67b4aa69e2
|
check_purge() after removing a context as it could make a hook purgable
|
2019-06-05 16:56:02 +01:00 |
|
jesopo
|
2d46fe0cbf
|
labels: Use BatchType to match, pass lines not line , batch ID isn't a label,
fire event on label response
|
2019-06-04 17:54:19 +01:00 |
|
jesopo
|
2470c1ec03
|
Add new BatchType object, to match like how Capability and MessageTag do
|
2019-06-04 17:51:55 +01:00 |
|
jesopo
|
8dbae6a5e9
|
Give SentLine (and preproc.send events) a new event object, to track events
related to a line after it is sent
|
2019-06-04 17:51:20 +01:00 |
|
jesopo
|
3ac01197f2
|
Send PING and PONG as 'immediate' lines
|
2019-06-04 14:31:34 +01:00 |
|
jesopo
|
4a4d0a37d7
|
Only return definitely-writen lines from IRCSocket._send, refactor in prep for
lines that request to be sent 'immediately'
|
2019-06-04 14:28:35 +01:00 |
|
jesopo
|
a802e66dcf
|
Defer decoding http payload bytestring until after checking ContentType
|
2019-06-04 13:47:03 +01:00 |
|
jesopo
|
ef221f4165
|
v1.8.0 release
|
2019-06-03 13:30:39 +01:00 |
|
jesopo
|
c212d70b68
|
Hold on to BATCH args, allow event hooks to manipulate batches
|
2019-06-02 15:18:36 +01:00 |
|
jesopo
|
5204ac3300
|
fix some CAP related type hints
|
2019-06-02 10:14:09 +01:00 |
|
jesopo
|
f9f637e084
|
Remove IRCSendBatch, fix some batch-related type hints
|
2019-06-02 10:13:51 +01:00 |
|
jesopo
|
20c027fd0b
|
check if we should enable write throttling before writing, clear _recent_sends
when we turn on throttling and only "turn on" throttling once
|
2019-06-01 22:28:57 +01:00 |
|
jesopo
|
b84d133500
|
add __str__ and __repr__ defs to IRCLine.ParsedLine
|
2019-06-01 22:28:37 +01:00 |
|
jesopo
|
e5c11f4aef
|
add 'module-blacklist/whitelist' to bot.conf - use that as well as DB setting
|
2019-06-01 15:06:57 +01:00 |
|
jesopo
|
5077bad522
|
list()-ify filter() return, otherwise boolean checks against it are wrong
|
2019-06-01 15:05:57 +01:00 |
|
jesopo
|
c3454f2bfe
|
available_capability returns str - fix type hint for this
|
2019-06-01 15:02:38 +01:00 |
|
jesopo
|
dc284bab4a
|
Only enable write throttling when _write_buffer is empty
closes #59
|
2019-05-31 15:49:34 +01:00 |
|
jesopo
|
f2cf86b8c0
|
More explicitly require throttle_done() only for _queued_lines
|
2019-05-31 15:32:55 +01:00 |
|
jesopo
|
a3a61d2e86
|
Log server name when we see a _send failure
|
2019-05-30 15:46:01 +01:00 |
|
jesopo
|
367eb1c60e
|
Make labeled-resposnes it's own module, tag and track every sent line
|
2019-05-30 15:36:10 +01:00 |
|
jesopo
|
f0dee5ebd6
|
Immutable arg default values leads to weird data persistence
|
2019-05-30 15:30:15 +01:00 |
|
jesopo
|
b8f778d7bd
|
Only try to send QUITs on ctrl+c when we're connected - sys.exit otherwise
|
2019-05-29 16:11:47 +01:00 |
|
jesopo
|
768059fcf4
|
Switch resume.py to use the last server-time it saw, not last .recv()
|
2019-05-29 15:53:20 +01:00 |
|
jesopo
|
0be9046669
|
Pass str object to BeautifulSoup, not bytes. closes #56
|
2019-05-28 10:22:35 +01:00 |
|
jesopo
|
69a780b596
|
append ".py" when doing find_module on ModuleType.FILE
|
2019-05-27 16:56:13 +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
|
ce3a0668c6
|
Throw an exception when we detect a complex circular dependency
|
2019-05-27 11:42:47 +01:00 |
|
jesopo
|
5b780672a8
|
Enable TCP keepalives
|
2019-05-27 07:58:24 +01:00 |
|
jesopo
|
2a93a8f1dd
|
Only check for unknown dependencies once
|
2019-05-26 20:27:17 +01:00 |
|
jesopo
|
38dd69a71e
|
Only iterate a module's deps, not all modules, when checking for circular deps
|
2019-05-26 14:47:05 +01:00 |
|
jesopo
|
4048f63538
|
'cicular' -> 'circular', words are hard
|
2019-05-26 11:25:52 +01:00 |
|
jesopo
|
9815ddac8a
|
'cycular' -> 'cicular'
|
2019-05-26 06:54:29 +01:00 |
|
jesopo
|
69a1f42ecc
|
Add basic comments for dependency-sorting system
|
2019-05-25 21:47:28 +01:00 |
|
jesopo
|
bb475d5cc8
|
Implement ordering modules by depends-on hashflag
|
2019-05-25 21:43:32 +01:00 |
|
jesopo
|
eeee2458d3
|
Fix utils.parse.hashflags type hints
|
2019-05-25 21:42:42 +01:00 |
|
jesopo
|
552902d462
|
Refactor ModuleManager
|
2019-05-25 18:24:50 +01:00 |
|
jesopo
|
d0634bb54e
|
Don't store hashflags as a dict before returning them - allow duplicate keys
|
2019-05-25 12:58:07 +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
|
503969abfd
|
Bump version to v1.7.1
|
2019-05-24 06:52:25 +01:00 |
|
jesopo
|
b12298135e
|
Bump version to v1.7.0
|
2019-05-23 19:10:22 +01:00 |
|
jesopo
|
6678076490
|
Remove column from server.add SQL (leftover from removing 'ipv4' column)
|
2019-05-21 10:45:24 +01:00 |
|
jesopo
|
ab1074cf4d
|
Remove mention of ipv4 - detect address family automatically
|
2019-05-21 10:11:09 +01:00 |
|
jesopo
|
db33e12c8c
|
Remove Capability.enabled() - it's unused
|
2019-05-20 16:36:02 +01:00 |
|
jesopo
|
b12c38c326
|
typing.List -> typing.Sequence
|
2019-05-20 16:35:50 +01:00 |
|
jesopo
|
bdd161256d
|
has_capability -> has_capability_str , add new has_capability
|
2019-05-20 16:33:32 +01:00 |
|
jesopo
|
3ad83655d5
|
ParsedLine already deals with preventing newlines
|
2019-05-20 16:19:37 +01:00 |
|
jesopo
|
e752b60f6c
|
use fnmatchcase( so the strings are not case-"normalised"
|
2019-05-19 16:28:46 +01:00 |
|
jesopo
|
c607a0e67c
|
Implement utils.irc.hostmask_match for glob-like hostmask matching
|
2019-05-19 16:24:38 +01:00 |
|
jesopo
|
58d6b16744
|
Remove _name and _draft_name (unused) and add Capability.copy()
|
2019-05-19 11:00:58 +01:00 |
|
jesopo
|
7671dd2086
|
Switch back to events.name defaulting to None, use typing.cast to fix linting
error
|
2019-05-18 21:14:28 +01:00 |
|
jesopo
|
105351d6f3
|
Add a timestamp to recent_sends for EACH line sent
|
2019-05-18 19:08:34 +01:00 |
|
jesopo
|
d64d12f8fd
|
give EventCallbacks their event name
|
2019-05-18 18:35:23 +01:00 |
|
jesopo
|
eccd43d357
|
Add a way to not put spaces between docstring lines when stripping \n
|
2019-05-18 18:34:27 +01:00 |
|
jesopo
|
bea8556329
|
Bump version to v1.6.0
|
2019-05-17 13:39:55 +01:00 |
|
jesopo
|
7547eee96d
|
Catch server version string, from RPL_MYINFO
|
2019-05-15 17:12:21 +01:00 |
|
jesopo
|
a80eda614d
|
Add IRCBot.SOURCE, use it in ctcp.py
|
2019-05-15 10:30:36 +01:00 |
|
jesopo
|
38ba656bda
|
Add type hints to utils.irc.MessageTag
|
2019-05-14 23:07:42 +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
|
1c296826d7
|
Move module black/white list to IRCBot, allow "safe" loading of all modules
|
2019-05-12 14:10:59 +01:00 |
|
jesopo
|
d291cd5063
|
Revamp how CAPs are tracked through REQ and ACK/NAK etc
|
2019-05-11 18:22:40 +01:00 |
|
jesopo
|
295f7a751c
|
Refactor CAPs in to objects
|
2019-05-11 15:11:09 +01:00 |
|
jesopo
|
091818fa32
|
Hold context in EventCallback objects, add name<->context translation in
ModuleManager
|
2019-05-10 16:11:22 +01:00 |
|
jesopo
|
f7eae1a978
|
Tokenize IRC data as soon as it comes out of IRCServer
|
2019-05-09 10:36:33 +01:00 |
|
jesopo
|
920dce0221
|
Add IRCServer.has_user_id, to check if we've seen a user before
|
2019-05-05 00:16:37 +01:00 |
|
Patrick Nappa
|
2c344c9ddd
|
forgot the beautiful %
|
2019-05-03 13:50:51 +10:00 |
|
Patrick Nappa
|
471c11e229
|
ensure that non-url characters not separated by whitespace aren't consumed
|
2019-05-03 13:43:08 +10:00 |
|
jesopo
|
e844004ba1
|
Fix reconnect() type hint issues
|
2019-05-01 17:13:55 +01:00 |
|
jesopo
|
aa1b457632
|
Change TRIGGER_RETURN and TRIGGER_EXCEPTION to an enum
|
2019-05-01 17:13:41 +01:00 |
|
jesopo
|
992ab15394
|
Bump version to v1.5.0
|
2019-04-30 12:05:59 +01:00 |
|
jesopo
|
280e647a84
|
Only pass through args from connection params when reconnecting
|
2019-04-30 12:05:36 +01:00 |
|
jesopo
|
0afe798b83
|
Support parsing iso8601 with microseconds
|
2019-04-28 12:11:48 +01:00 |
|
jesopo
|
74c16a1bbe
|
Actually respect default return in Exports.get_one
|
2019-04-27 14:49:18 +01:00 |
|
jesopo
|
bdcb4b5db2
|
Add missing ":"
|
2019-04-25 17:50:41 +01:00 |
|
jesopo
|
1240b154cb
|
Support interfaces that don't have AF_INET and/or AF_INET6
|
2019-04-25 17:48:51 +01:00 |
|
jesopo
|
7643a962bd
|
Refuse to get the title for any url that points locall
|
2019-04-25 15:58:58 +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
|
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
|
bd4fdfdc7b
|
Add UNIQUE constraint for alias on servers table
|
2019-04-24 11:49:54 +01:00 |
|
jesopo
|
032f6fbc3b
|
IRCServer.alias is no longer optional
|
2019-04-24 11:45:21 +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
|
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
|
34848324d5
|
Bump version to v1.4.0
|
2019-04-16 09:59:40 +01:00 |
|
jesopo
|
272b60842e
|
'IRCChannels._get_id' -> 'IRCChannels.get_id'
|
2019-04-07 13:59:53 +01:00 |
|
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 |
|