Commit graph

1092 commits

Author SHA1 Message Date
jesopo
369160d46f allow requesting utils.irc.color() to not add terminating code 2020-01-21 16:40:01 +00:00
jesopo
c336fdf93b split permission for !alias/!balias in to two 2020-01-21 16:14:01 +00:00
jesopo
fb457c52fb IRCBuffer.find's not_pattern arg should be optional 2020-01-20 16:28:50 +00:00
jesopo
119066b549 user varaible doesn't exist in invite formatting code
closes #231
2020-01-20 14:17:50 +00:00
jesopo
6b0bb512ef colourise server name for server notice formatting 2020-01-20 14:12:37 +00:00
jesopo
0abcc173cd {~TNICK}, not {TNICK} 2020-01-20 14:00:20 +00:00
jesopo
5a0a340e44 better formatting for server notices 2020-01-20 13:48:50 +00:00
jesopo
1f2beef0f5 pass :source or connection_params.hostname through server-notice event 2020-01-20 13:48:29 +00:00
jesopo
8fbf91a2f0 show account and realname in JOIN formatting when available 2020-01-20 13:42:36 +00:00
jesopo
c6d913e218 provide {NICK} as well as {~NICK} as default formatting args 2020-01-20 13:25:33 +00:00
jesopo
dba3f7abc3 .zfill(3) milliseconds in utils.datetime.datetime_human 2020-01-20 13:24:58 +00:00
jesopo
cb73507c5e use a TimeSpec system to request milliseconds in utils.datetime 2020-01-20 13:20:26 +00:00
jesopo
fbe4c93c58 don't overwrite line in MOTD formatting 2020-01-20 13:20:08 +00:00
jesopo
50be75a5e2 also do .format(**) when there's no user object 2020-01-20 13:19:47 +00:00
jesopo
0eb92278cc do all user-provided formatting as {VAR} formatting
otherwise, e.g., a PRIVMSG with {~NICK} will be replaced with user nickname
2020-01-20 12:07:04 +00:00
jesopo
631e669426 _on_topic doesn't always have a user 2020-01-17 18:13:35 +00:00
jesopo
ba5d79c953 fix utils.datetime.iso8601_parse linting error 2020-01-17 16:37:31 +00:00
jesopo
9efe952a9f BufferLine.id should be a string 2020-01-17 16:37:22 +00:00
jesopo
b4e3ee5d0e pass draft/delete events through to format_activity/print_activity 2020-01-17 16:28:48 +00:00
jesopo
95668f2b8b give BufferLine.id default value, overwrite in ircv3_msgid.py 2020-01-17 16:28:23 +00:00
jesopo
5c7026886d overwrite BufferLine.timestamp with ircv3 server-time when available 2020-01-17 15:58:37 +00:00
jesopo
3e574f3c52 add BufferLine.timestamp (datetime.datetime object) 2020-01-17 15:58:08 +00:00
jesopo
e4d71f6c0c add dateutil as a dependency, use it in utils.datetime.iso8601_parse 2020-01-17 15:57:30 +00:00
jesopo
ae7c6d8572 export function for formatting activity lines 2020-01-17 15:36:34 +00:00
jesopo
e3070f52ff refactor format_activity to use {FORMATTING} for maybe-colored things 2020-01-17 15:31:12 +00:00
jesopo
a79f866269 tidy up IRCBuffer.find, respect line.deleted there too 2020-01-17 14:27:45 +00:00
jesopo
44644dcd56 allow BufferLines to be marked as deleted 2020-01-17 14:19:46 +00:00
jesopo
f8b509ef94 give ever BufferLine an ID (IRCv3 msgid or uuid4()) 2020-01-17 14:19:30 +00:00
jesopo
10006a9986 catching account-tag should be PRIORITY_HIGH 2020-01-16 09:50:37 +00:00
jesopo
c180900929 pay attention to account tag on PRIVMSGs 2020-01-16 09:47:57 +00:00
jesopo
21694c39a5 allow !part to work for "current channel" when op/!access 2020-01-13 20:06:32 +00:00
jesopo
6633427cb7 send expect_output on private command events too 2020-01-11 19:20:30 +00:00
jesopo
d06d74efb9 default pattern-based commands to expect_output=False 2020-01-11 19:10:19 +00:00
jesopo
ba958f341b also Accept-Language "en" in HTTP requests (0.5 weight) 2020-01-11 17:55:18 +00:00
jesopo
366a7bf326 Revert "explicitly .close() task in http.request_many()"
This reverts commit 7478d62b77.
2020-01-06 17:17:49 +00:00
jesopo
7478d62b77 explicitly .close() task in http.request_many() 2020-01-06 17:04:30 +00:00
jesopo
e9f82fc645 sort variable $names descending so longer ones are caught first 2020-01-03 06:59:22 +00:00
jesopo
9efb0b05fc by default, don't trigger command.regex events when in a statusmsg 2020-01-01 10:04:32 +00:00
jesopo
627b17e894 pass through (as well as stripping) statusmsg characters to events 2020-01-01 10:04:06 +00:00
jesopo
9dc6069e06 add missing closing paren to bitbot's User Agent 2019-12-29 08:00:05 +00:00
jesopo
e3455f94fb only respect CASEMAPPING when it's not an empty string 2019-12-27 21:34:08 +00:00
jesopo
cff1a55fe6 actually replace "$$" with "$" 2019-12-27 13:55:55 +00:00
jesopo
f2eba715b4 i should shift righwards also when finding double sigil 2019-12-27 13:50:12 +00:00
jesopo
a9c5b1dd83 remove extraneous space in "MONITOR -" command 2019-12-25 01:42:21 +00:00
jesopo
a5e7767f80 refactor nick_regain, also look for NICK/QUIT for regain 2019-12-25 01:41:01 +00:00
jesopo
b2c5ad041c simplify token replace, catch one-char end-of-string tokens 2019-12-21 21:40:44 +00:00
jesopo
2218d4a888 use utils.parse.format_token_replace() in aliases.py 2019-12-21 21:17:08 +00:00
jesopo
bc1c77d8a8 implement standardised $token replacement in utils.parse 2019-12-21 21:16:50 +00:00
jesopo
b0a71f8bb2 don't have [''] as args_split when there's no args (for alias) 2019-12-21 21:16:14 +00:00
jesopo
3c77793490 only look at 329 when it's a channel we know we are in 2019-12-20 22:03:40 +00:00
jesopo
a2ac26c072 use +=timedelta(minutes=1) when calculating next minute
closes #223
2019-12-19 14:02:55 +00:00
jesopo
e458127fb5 move --database/data-dir/log-dir to bot.conf, do some work for diff db engines 2019-12-19 13:56:58 +00:00
jesopo
cfcccdd37b we no longer use DECODE_CONTENT_TYPES 2019-12-18 20:04:14 +00:00
jesopo
1fedaf02bd 'hostmaks' -> 'hostmask' typo in code for !hostmask add 2019-12-18 19:36:52 +00:00
jesopo
ddcf54e751 add kwarg name replacements to aliases.py, use it for $NICK$ 2019-12-17 14:30:14 +00:00
jesopo
00a8129634 pass user on get.command events, so e.g. aliases know user nicknames 2019-12-17 14:29:37 +00:00
jesopo
cc02595056 move internal.identified event call to _has_identified (covers hostmasks and
nickserv)
2019-12-14 21:40:49 +00:00
jesopo
f6273a5a67 "_match" -> "_schedule_match_part" typo 2019-12-13 17:16:02 +00:00
jesopo
8bf6db7fe5 use zip() instead of enumerate() and indexing 2019-12-12 12:10:08 +00:00
jesopo
e58e5e0691 more brackets in blob of math, just in case 2019-12-12 12:07:42 +00:00
jesopo
2084285480 support cron schedule range values 2019-12-12 12:06:02 +00:00
jesopo
48bab203bf comma-separated cron schedule check should be first 2019-12-12 12:02:27 +00:00
jesopo
80f0a3d94c refector cron.py and support comma-separated schedule pieces 2019-12-12 12:00:27 +00:00
jesopo
60db9ff389 first draft on cron module 2019-12-11 15:43:17 +00:00
jesopo
ff050b3583 send.stdout should default to thinking it is in-channel 2019-12-11 11:19:42 +00:00
jesopo
5a2905de01 allow Request objects to specify their timeout 2019-12-11 11:18:19 +00:00
jesopo
6f8338b7b5 allow users to set command-method for PMs with them 2019-12-10 17:11:44 +00:00
jesopo
b4b998b7d4 default command responses in PM to use NOTICE 2019-12-10 16:59:00 +00:00
jesopo
cffbcad430 support bot-wide aliases with !balias
closes #212
2019-12-10 11:28:09 +00:00
jesopo
734aec179f move aliases.py to core_modules 2019-12-10 11:23:34 +00:00
jesopo
a3bde5e682 fix ModuleManager.find_module() - don't set path until it's actually found 2019-12-10 11:08:44 +00:00
jesopo
58c09f7342 fix typos, type hinting and missed changes in ModuleManager 2019-12-10 05:32:55 +00:00
jesopo
638eee0d68 move core modules to src/core_modules, make them uneffected by white/black list 2019-12-10 05:27:35 +00:00
jesopo
9d16f7d523 move sys.exit() codes to an enum in utils.consts 2019-12-10 05:26:16 +00:00
jesopo
3028759c86 use get_list and set_list to move dynamic module en/disabling to bot.conf 2019-12-07 11:07:43 +00:00
jesopo
3bf2f86702 added get_list() and set_list() to src/Config.py 2019-12-07 11:05:32 +00:00
jesopo
e08bac9312 add src/Config.py.__delitem__ 2019-12-07 11:05:13 +00:00
jesopo
a98dc6e0a6 add src/Config.py.__setitem__ 2019-12-07 10:51:04 +00:00
jesopo
fc069d6da2 fix src/Config.py type hinting 2019-12-07 10:50:50 +00:00
jesopo
7274d1bf28 add ability to save config file 2019-12-07 10:42:43 +00:00
jesopo
374cc307b1 remove -m/-M and BaseModule.command_line - it doesn't work any more 2019-12-07 10:23:17 +00:00
jesopo
b212714561 Revert "add utils.parse.shortencode() and utils.parse.shortdecode - effectively base62"
This reverts commit e71f3bbc36.
2019-12-06 14:29:26 +00:00
jesopo
e71f3bbc36 add utils.parse.shortencode() and utils.parse.shortdecode - effectively base62 2019-12-06 12:10:41 +00:00
jesopo
b889a9f841 add utils.http.Session object, to preserve cookies across requests 2019-12-03 13:00:43 +00:00
jesopo
499e83a1cb refactor karma to be per-user. added data migration script for this 2019-12-01 07:07:28 +00:00
jesopo
3ce947bb77 add database.users.get_nickname, to get nickname from ID 2019-12-01 07:05:17 +00:00
jesopo
b385323386 fix database.user_settings.find logic 2019-12-01 07:05:01 +00:00
jesopo
91c3688018 only add BufferLine to buffer *after* received.message.* callback 2019-11-30 20:25:52 +00:00
jesopo
d688636909 rework permissions module to precompile hostmasks 2019-11-30 19:32:38 +00:00
jesopo
411f66324d use ANSI_RESET in utils.irc.parse_format, not all the different resets 2019-11-28 15:42:12 +00:00
jesopo
c79bd6d0ba utils.http.Response.decode() should default to detected encoding 2019-11-28 07:35:16 +00:00
jesopo
747ba5c646 add IRCLine.parse_human() to allow for "!raw /msg jesopo hello" 2019-11-27 17:38:17 +00:00
jesopo
40a459a83c add Buffer.get_all 2019-11-27 12:59:50 +00:00
jesopo
2139c99562 fix BufferLine.notes definition 2019-11-27 12:59:36 +00:00
jesopo
710b711c70 dataclass-ify IRCBuffer.BufferLine, add .notes={} 2019-11-27 12:07:15 +00:00
jesopo
9972125b24 remove IRCBuffer.skip_next (not used), pass buffer lines on message events 2019-11-27 12:06:57 +00:00
jesopo
e4a5bd01e9 explicitly use "lxml" for finding page encoding 2019-11-26 14:34:48 +00:00
jesopo
8e9da0d681 _find_encoding takes bytes and soupifies now 2019-11-26 13:58:37 +00:00
jesopo
c898bc4be1 utils.http.request_many() shouldn't decode data for Response 2019-11-26 13:54:17 +00:00
jesopo
2d21dfa229 utils.http.Response.data should always be bytes - add .decode and .soup 2019-11-26 13:42:01 +00:00
jesopo
ed775ddbe3 remove parser from utils.http.Request, add Request.soup() 2019-11-26 11:35:56 +00:00
jesopo
93aea08818 utils.datetime.datetime_utcnow() -> utils.datetime.utcnow() 2019-11-25 18:18:09 +00:00
jesopo
6a6e789ec9 add cookies and .json() to utils.http.Response objects 2019-11-25 18:17:30 +00:00
jesopo
ab8bc65cc9 change utils.http.Request to be a dataclass 2019-11-25 13:42:10 +00:00
jesopo
5730d6fe59 refactor commands (mostly stdout/stderr) and split typing/reply out
closes #208
2019-11-22 16:23:30 +00:00
jesopo
2dfc55fb9f refactor permissions and allow hostmasks to be assigned to accounts 2019-11-21 15:49:08 +00:00
jesopo
9f8c5acf52 add a way to execute commands through bitbotd (use for master-password) 2019-11-21 10:39:26 +00:00
jesopo
4d30263315 give bitbot a unique User-Agent
closes #206
2019-11-20 14:42:34 +00:00
jesopo
11c3104d02 move things like IRCBot.VERSION to before imports (for utils.http) 2019-11-20 14:41:14 +00:00
jesopo
bd176240d6 consecutive HASH_STOP chars at start shouldn't count as a stop 2019-11-19 14:45:47 +00:00
jesopo
554f21a84c HASH_STOP should still be respected if last character 2019-11-19 14:43:24 +00:00
jesopo
bc6b1dda47 chance src/Cache.py from time.monotonic() to time.time() 2019-11-19 11:41:50 +00:00
jesopo
65023dc84b move "+5m" syntax parsing out to utils.parse 2019-11-18 15:57:23 +00:00
jesopo
fe25c6bc26 switch some utils.irc functions to use f-strings 2019-11-18 14:16:30 +00:00
jesopo
d89a3125ab truncate nickname hash operations to 64bit 2019-11-18 14:09:47 +00:00
jesopo
a8b1bd95f7 implement weechat-style djb2 colour hashing 2019-11-18 13:51:55 +00:00
jesopo
a7e21abfad import missing comma, 'Events'->'Event' 2019-11-18 12:10:20 +00:00
jesopo
06161b326c remove unused imports in src/utils/__init__.py 2019-11-18 12:09:18 +00:00
jesopo
9c4902dcfe "EventsResultsError"->"EventResultsError", move errors to utils.error 2019-11-18 12:06:59 +00:00
jesopo
5d55086847 move utils.consts.BITBOT_MAGIC to utils.decorators 2019-11-15 14:09:35 +00:00
jesopo
5d01db8514 move all datetime-related code from utils/__init__ to utils.datetime 2019-11-15 13:59:09 +00:00
jesopo
5e8cf06a45 dont expose has_magic/get_magic in utils/__init__.py, ref directly 2019-11-15 13:41:03 +00:00
jesopo
bfcf40edd7 split some stuff out of utils/__init__.py 2019-11-15 13:39:24 +00:00
jesopo
2cb55306c3 show first-words datestamp on !words output 2019-11-15 12:13:16 +00:00
jesopo
c9cb8c8805 set info log rolling backup count to 1 (0 means "keep all backups") 2019-11-14 13:35:23 +00:00
jesopo
a1e9aabb84 add typehinting for foreground/background 2019-11-13 10:47:58 +00:00
jesopo
5d2dd9178f only set color_finished=True when is_background, otherwise next char sets it 2019-11-13 10:43:15 +00:00
jesopo
8a8bd8a77e colorize nicks on JOIN formatting 2019-11-11 12:49:45 +00:00
jesopo
b7bfd414be hash_colorize code should first be looked up in HASH_COLORS 2019-11-11 12:48:37 +00:00
jesopo
727fb3427d .lower() strings when hash-colorizing them 2019-11-11 12:40:36 +00:00
jesopo
ac30f8d4cc don't use hash() for hashed colorising as it's not stable through restarts 2019-11-11 12:13:46 +00:00
jesopo
2ad8623eb3 add utils.irc.hash_colorize() to color a string by the string's hash 2019-11-11 12:06:16 +00:00
jesopo
98183fe4b9 add IRCArgs.append func 2019-11-08 17:41:18 +00:00
jesopo
5fcf18313e silently eat Control socket .send() failures 2019-11-08 13:38:07 +00:00
jesopo
09fe1c5a70 don't stop parsing colors at comma 2019-11-04 13:33:10 +00:00
jesopo
bcdffacab5 add on_pause() and on_resume() for module - use in rest_api.py 2019-11-04 10:52:41 +00:00
jesopo
2b001e1ec6 ' ' -> " " 2019-10-31 13:06:26 +00:00
Valentin Lorentz
fbf8cd1a16 Fix type errors detected by 'mypy --ignore-missing-imports src'. 2019-10-30 22:26:59 +01:00
jesopo
9958c9169d fix _line() related type hinting issues in IRCServer.py 2019-10-30 13:46:29 +00:00
jesopo
3634b72622 add utils.date_human() - use it in badges.py 2019-10-30 10:25:07 +00:00
jesopo
4d85c3d1e0 utils.parse doesn't need to import utils 2019-10-29 18:03:03 +00:00
jesopo
080bcef3a0 'from src.utils import' -> 'from . import' 2019-10-29 18:02:50 +00:00
jesopo
9b349f8cc0 move typing.Callable def so Event doesn't have to be in " " 2019-10-29 18:00:59 +00:00
jesopo
40a340e94f utils.cli shouldn't know about Database 2019-10-29 18:00:38 +00:00
jesopo
46e4b75f6b utils.irc doesn't need to know about the whole of utils 2019-10-29 18:00:19 +00:00
jesopo
9f48dfb1f1 send_mode() args is already a list 2019-10-29 10:23:47 +00:00
jesopo
8983338680 move src/utils/irc/__init__.py to src/utils/irc.py 2019-10-28 10:57:19 +00:00
jesopo
7ee65f8f8c remove src/utils/irc/protocol.py 2019-10-28 10:56:33 +00:00
jesopo
1bddc3b37f Revert "remove unneeded import"
This reverts commit 8425c11c97.
2019-10-27 10:32:13 +00:00
jesopo
8425c11c97 remove unneeded import 2019-10-27 10:25:37 +00:00
jesopo
8f4b5a0e70 move IRCLine related code from utils.irc to IRCLine.py 2019-10-27 10:19:00 +00:00
jesopo
3a755bb15f don't consume past 2nd digit in e.g. "\03033,123" 2019-10-25 17:12:24 +01:00
jesopo
877287291a reason arg of panic() shouldn't be optional, detect current exception 2019-10-25 14:31:09 +01:00
jesopo
b3f43a6721 remove bot.panic() throw kwarg 2019-10-25 14:27:12 +01:00
jesopo
226ebe1f1f DEBUG log IRCBot.connect failure stacktrace 2019-10-25 14:18:22 +01:00
jesopo
7d4c6b6941 bot.panic() should just call sys.exit() 2019-10-25 14:14:30 +01:00
jesopo
9d1b640db4 re-add list moving CAP objects from capability_queue to capabilities_requested 2019-10-25 11:52:11 +01:00
Valentin Lorentz
d8c48fa98f Make send_capability_queue split 'CAP REQ' message based on string length.
Instead of sending caps by groups of 10.
2019-10-23 21:20:56 +02:00
jesopo
062290704c explicitly break event loop on Kill 2019-10-22 14:26:40 +01:00
jesopo
00e85c7573 bitbotctl stop should be keepalive so it exits when bitbotd exits 2019-10-18 11:29:59 +01:00
jesopo
f64131a10f support utf8 hostnames by punycode (idna) encoding 2019-10-18 10:58:24 +01:00
jesopo
a1b8a4033a hook_handler should be catching TRACE logging 2019-10-17 17:49:49 +01:00
jesopo
aa2511baaa add IRCBot.stop() - use it for !shutdown and './bitbotctl stop' 2019-10-17 16:53:48 +01:00
jesopo
417c4f302e default to using a "data directory" for bitbot (~/.bitbot/) 2019-10-17 12:39:56 +01:00
jesopo
b895958f09 remove debug prints from IRCBot 2019-10-15 16:16:29 +01:00
jesopo
aa3906dfa3 fix type linting issues for client in Control.is_readable 2019-10-14 18:17:15 +01:00
jesopo
88ffa421c1 add bitbotctl reload command to reload all modules 2019-10-14 14:52:58 +01:00
jesopo
99b4663ce7 run Control callbacks on main thread
closes #180
2019-10-14 14:51:53 +01:00
jesopo
e50290046a remove safe arg from ModuleManager.load_modules() - try_reload_modules covers this now 2019-10-14 13:02:16 +01:00
jesopo
a9111c7241 add ModuleManager.try_reload_modules(), to try reloading in a transaction
if any of the modules fails to reload, rollback and use the already loaded modules. closes #179
2019-10-14 12:56:04 +01:00
jesopo
4940aff877 refactor out chosing loadable modules in to _list_valid_modules() 2019-10-14 11:37:04 +01:00
jesopo
2ca702b787 don't have version 'v' prefix in VERSION 2019-10-11 17:27:36 +01:00
jesopo
82f77472c6 'test_handler' -> 'hook_handler' 2019-10-11 17:17:43 +01:00
jesopo
14f5ec38ed hold current version in it's own file: VERSION 2019-10-11 17:03:14 +01:00
jesopo
85a8ddf2d1 kill bitbotctl connection after rehash 2019-10-11 15:58:47 +01:00
jesopo
6a4cdabc93 add "rehash" bitbotctl command 2019-10-11 15:54:43 +01:00
jesopo
22b6a19054 try/except Control socket writes 2019-10-11 15:16:39 +01:00
jesopo
de389b34b8 add first real cli functionality: showing log 2019-10-11 15:12:26 +01:00
jesopo
cefde48e42 first draft of infrastructure for unix domain control socket 2019-10-11 14:00:26 +01:00
jesopo
daeb37226a LockFile doesn't need to hold on to _database_location 2019-10-11 14:00:02 +01:00
jesopo
175f90f6a2 add "poll sources" - objects that can provide additional filenos for polling 2019-10-11 13:59:28 +01:00
jesopo
b7b045eadb Don't exit when there are no connected servers
closes #175
2019-10-11 13:06:52 +01:00
jesopo
fd0baff093 only .call() PollHooks when they're "due" 2019-10-10 14:12:58 +01:00
jesopo
1c792f0194 move PoolHook registrations to start.py 2019-10-10 13:58:45 +01:00
jesopo
e624292608 v1.12.0 release 2019-10-10 13:36:55 +01:00
jesopo
a2b73469e6 v1.12.0-rc2 release 2019-10-10 12:43:19 +01:00
jesopo
5be01a45c4 'server.conncect_time' -> 'server.connect_time' 2019-10-10 12:31:24 +01:00
jesopo
2c19bdb949 add a fairly basic file locking mechanism with src/LockFile.py
closes #96
2019-10-10 12:11:03 +01:00
jesopo
0331b763ff refactor multi-line-to-line normalisation to utils.parse.line_normalise(), use it in rss.py
closes #174
2019-10-10 10:33:18 +01:00
jesopo
51a4a4253c -V command line arg should still effect stdout 2019-10-09 17:54:12 +01:00
jesopo
f721cf848a stdout output should just be WARN - put INFO in to a daily file
this is because stdout, in something like systemd, will mess up journalctl output.
2019-10-09 17:36:17 +01:00
jesopo
ab2701837c we should be catching timer as the output of self._timers.add 2019-10-09 12:47:03 +01:00
jesopo
a0870ad118 v1.12.0-rc1 release 2019-10-09 12:42:22 +01:00
jesopo
6ee2b6cf27 self.timers -> self._timers 2019-10-08 21:51:58 +01:00
jesopo
f8662ad6e1 fix IRCChannel.topic_setter type hint 2019-10-08 14:55:46 +01:00
jesopo
7a5edccb98 transient timers shouldn't use the event system 2019-10-08 13:49:55 +01:00
jesopo
4c02c7c86a refactor anything that effects event poll timeout in to PollHook objects 2019-10-08 12:20:08 +01:00
jesopo
68aa89f16f commit FunctionSetting changes i forgot to commit yesterday 2019-10-08 11:38:56 +01:00
jesopo
257042ac2c combine find_user_settings() and find_user_settings_prefix() 2019-10-07 12:51:44 +01:00
jesopo
50d1eb6b8c combine find_setting() and find_setting_prefix() on user/channel/server/bot 2019-10-07 12:46:52 +01:00