Commit Graph

157 Commits (master)

Author SHA1 Message Date
C. McEnroe 3e03b7502b Add current topic to tab-complete so it can edited 2020-07-13 10:22:33 -04:00
C. McEnroe e6db22d2bb Don't scan ignored messages for URLs 2020-07-09 22:43:35 -04:00
C. McEnroe 94fb9798c5 Bump ParamCap to 254
Apparently IRCds have decided that the 15-parameter limit doesn't matter
anymore. 254 is the maximum number of single-byte parameters (following
a single-byte command) which fit in a 512-byte CR-LF-terminated line.
When everyone decides that the 512-byte line length limit doesn't matter
either, I will delete my software and people can use some JavaScript
garbage instead.

This makes struct Message 2080 bytes, but there's only ever one or two
of them around at once. Avoid passing it by value to handle.
2020-06-24 13:36:24 -04:00
C. McEnroe 4fb94a1a22 Color mentions up to first ": " rather than just ":"
Avoids coloring everything up to a ":)".
2020-06-16 23:14:07 -04:00
C. McEnroe 721c3a9ee6 Add additional permission for linking with LibreSSL
https://www.gnu.org/licenses/gpl-faq.en.html#GPLIncompatibleLibs
2020-06-08 17:48:07 -04:00
C. McEnroe 73bda18110 Check ignores against id
Otherwise they do not work correctly for QUIT and NICK. This also lets
you ignore private messages only by putting the nick in the third field.
2020-04-07 13:18:42 -04:00
C. McEnroe 1969c9125f Error on missing MODE parameters 2020-04-05 13:17:38 -04:00
C. McEnroe bb531a71b1 Error on invalid ISUPPORT values 2020-04-05 13:11:19 -04:00
C. McEnroe 75a6aa9258 Use gnu-case-range and gnu-conditional-omitted-operand extensions
I'm sad to do this but I just can't stand writing (foo ? foo : bar)
anymore.
2020-04-03 17:10:52 -04:00
C. McEnroe 25f419465f Add /ignore message filtering patterns 2020-03-31 14:30:42 -04:00
C. McEnroe ff78362826 Replace some declaration; while loops with for loops
I should have been using this for getopt loops already but the call here
is slightly too long to fit on one line as a for loop.
2020-03-30 19:44:45 -04:00
C. McEnroe bb2f3c7a01 Rewrite mode formatting again and write to log
Going back to one line per mode change again because it's easier.
2020-03-28 12:08:10 -04:00
C. McEnroe 3dc998272e Log chat events
Still missing is logging MODE changes, which will be hell, unless it
just logs the raw stuff.
2020-03-25 18:58:48 -04:00
C. McEnroe 4f40ace9d4 Track MODE in replies 2020-03-23 16:52:24 -04:00
C. McEnroe cf1545870a Assume worst case for unknown user and host in splitMessage
The default USERLEN of 9 doesn't have a great source, the RFC only says
that nicks are length 9, so my assumption is that usernames are not
longer.
2020-03-23 13:25:10 -04:00
C. McEnroe eb6316c235 Track own host, handle CHGHOST 2020-03-22 14:32:20 -04:00
C. McEnroe 0d0a6d1575 Handle RPL_CHANNELMODEIS 2020-03-22 11:40:58 -04:00
C. McEnroe 61828a12e9 Handle user mode changes 2020-03-22 11:26:16 -04:00
C. McEnroe 8da45d9183 Rewrite handleMode 2020-03-22 11:18:21 -04:00
C. McEnroe 1c508b78ab Handle RPL_UMODEIS 2020-03-18 08:33:42 -04:00
C. McEnroe 2f53f75892 Ignore 422 ERR_NOMOTD
pounce will start sending these because some silly clients don't think
they're connected until some MOTD reply...
2020-03-09 03:08:59 -04:00
C. McEnroe 7e120f00a1 Set self.pos before handling the message
This intuitively feels wrong, but isn't. Most importantly, handleError
immediately exits, but we still need to "consume" that message,
otherwise pounce will keep sending it on reconnect. The same goes for
any other handler that might cause an exit, such as a require parameter
count failure.
2020-03-08 23:15:56 -04:00
C. McEnroe 8570a62235 Implement the causal.agency/consumer capability 2020-02-29 01:03:46 -05:00
C. McEnroe 78b4832bfe Add raw modes to mode message 2020-02-25 03:00:36 -05:00
C. McEnroe e9524b4af3 Handle changing setParamModes, paramModes and other channel modes 2020-02-25 02:54:15 -05:00
C. McEnroe 431945614d Fix handling EXCEPTS and INVEX without values 2020-02-25 02:24:29 -05:00
C. McEnroe 3c5e1c95a4 Add /mode, /except, /invex and handle lists replies 2020-02-25 02:12:35 -05:00
C. McEnroe c3c40d738b Accumulate mode changes into a buffer for one message 2020-02-23 22:44:19 -05:00
C. McEnroe 9609723dc6 Handle ERR_CHANOPRIVSNEEDED 2020-02-20 05:04:58 -05:00
C. McEnroe 50a6d34a55 Handle MODE changing channel list modes 2020-02-20 04:53:06 -05:00
C. McEnroe c2c8595012 Handle MODE setting channel prefix modes 2020-02-20 04:18:25 -05:00
C. McEnroe a3b6d5d9a7 Change ban list formatting 2020-02-20 03:44:57 -05:00
C. McEnroe b3c5458fc9 Rearrange some handlers 2020-02-20 03:18:48 -05:00
C. McEnroe 42ad42887c Handle RPL_INVITING when no invite-notify 2020-02-20 02:32:36 -05:00
C. McEnroe 5c79b16a51 Handle ERR_BANLISTFULL 2020-02-20 02:13:23 -05:00
C. McEnroe 1b01045bf0 Add handlers for user-in-channel errors 2020-02-20 01:52:58 -05:00
C. McEnroe f494fe6edb Add generic error reply handler
This should have been in way earlier...
2020-02-20 01:38:31 -05:00
C. McEnroe 56de4668ac Add /ban, /unban and handle ban list replies 2020-02-19 21:47:16 -05:00
C. McEnroe 2a33ee68dd Format WHOIS signon date with %F %T 2020-02-19 21:29:51 -05:00
C. McEnroe ba524ed804 Replace a lot of snprintf with a catf implementation 2020-02-16 19:12:19 -05:00
C. McEnroe 3885dd5231 Add 379 to WHOIS responses 2020-02-16 18:42:38 -05:00
C. McEnroe edd8855418 Track EXCEPTS and INVEX modes 2020-02-16 18:31:50 -05:00
C. McEnroe f84ab67311 Apply colorMentions to actions
The first-two-words branch works well for "/me verbs nick".
2020-02-16 05:22:28 -05:00
C. McEnroe 700b5d5870 Replace small integers in size_t with uint 2020-02-15 22:19:55 -05:00
C. McEnroe 83df94b359 Still add nick without prefixes to complete 2020-02-15 22:19:05 -05:00
C. McEnroe 9b1ab69908 Track PREFIX modes and CHANMODES 2020-02-15 05:29:54 -05:00
C. McEnroe cd341076c0 Show prefixes in NAMES and WHOIS replies 2020-02-15 05:04:43 -05:00
C. McEnroe 42d106260b Separate network info from self 2020-02-15 04:54:53 -05:00
C. McEnroe 39a343980b Add /invite 2020-02-14 21:36:58 -05:00
C. McEnroe 8aa6dd86f6 Add /away 2020-02-14 21:10:40 -05:00
C. McEnroe be08880fac Only exit on errorneous nick during registration 2020-02-12 19:30:07 -05:00
C. McEnroe 05579773c8 Add 378 to list of WHOIS responses
It's the one (from freenode anyway) that tells you where you're
connecting from.
2020-02-12 19:14:49 -05:00
C. McEnroe 489df70c37 Add /list 2020-02-12 02:39:23 -05:00
C. McEnroe 3a325d3914 Handle RPL_AWAY 2020-02-12 00:17:28 -05:00
C. McEnroe 7c171b8aff Rename query ID on nick change 2020-02-11 18:23:04 -05:00
C. McEnroe 6a5ebb0bab Don't insert color codes for non-mentions 2020-02-11 18:15:25 -05:00
C. McEnroe 4d532ec738 Take first two words in colorMentions
This lets phrases like "hi june" get colored, but still doesn't get
carried away.
2020-02-11 18:08:05 -05:00
C. McEnroe cc80fae758 Set self.nick to * initially
Allows removing a bunch of checks that self.nick is set, and it's what
the server usually calls you before registration.

Never highlight notices as mentions.
2020-02-11 17:52:55 -05:00
C. McEnroe 83a8952cf5 Move base64 out of chat.h 2020-02-11 17:40:08 -05:00
C. McEnroe ac4876718f Fix whois idle unit calculation
Rookie mistake.
2020-02-11 04:00:25 -05:00
C. McEnroe 36e0bbc4cd Split on <> in colorMentions
This allows it to color the nick in the common case of pasting "<nick>
something they said" into the chat. Technically it should color the
brackets too but that would be too much work.
2020-02-10 20:58:14 -05:00
C. McEnroe 80a79467ef Only automatically switch to expected joins 2020-02-10 20:24:07 -05:00
C. McEnroe 8e55c049b5 Avoid coloring mentions if there are control codes
This was breaking leading color codes.
2020-02-10 03:58:25 -05:00
C. McEnroe fabb89077d Update prompt when own nick changes 2020-02-10 01:29:30 -05:00
C. McEnroe 3436cd1068 Add /whois 2020-02-09 16:45:49 -05:00
C. McEnroe 82cf445858 Add self.nick to completion in Network, not None 2020-02-09 02:16:17 -05:00
C. McEnroe a212a7ae2c Show realname on JOIN if it is different from nick 2020-02-09 00:55:41 -05:00
C. McEnroe b30b93f672 Use fmemopen to build colored mentions string 2020-02-08 23:29:32 -05:00
C. McEnroe ec73174c4c Use unexpected NAMES replies to populate complete 2020-02-08 22:55:11 -05:00
C. McEnroe 9cbec9ca7e Color mentions
Sort of like Textual does, but only in the first part of the messaage,
either before a colon or before a space. Hopefully this makes it less
costly than it would be, and prevents false positives on people with
common nouns for nicks.
2020-02-08 22:51:13 -05:00
C. McEnroe f502260dd0 Scan messages for URLs 2020-02-08 18:29:01 -05:00
C. McEnroe b6bf6d62b0 Only show expected topic/names replies 2020-02-08 03:15:17 -05:00
C. McEnroe b5707af4b8 Handle KICK
See I knew the color cache in complete would be useful in at least one
place!
2020-02-08 00:58:17 -05:00
C. McEnroe f14175ebed Handle QUIT 2020-02-08 00:36:23 -05:00
C. McEnroe 7ebfeea330 Handle NAMES reply 2020-02-08 00:25:09 -05:00
C. McEnroe 58e1d5b4e2 Handle NICK 2020-02-08 00:01:59 -05:00
C. McEnroe 8b7cc1a0ed Clear completion for ID on self-part 2020-02-07 23:44:03 -05:00
C. McEnroe d314523b90 Update completion on join, part, privmsg 2020-02-07 23:33:23 -05:00
C. McEnroe 87e42cc627 Color notices LightGray by default 2020-02-06 22:59:49 -05:00
C. McEnroe 34514cf2ee Render actions in italic
Also render italic as normal if it's unsupported, as that is what would
happen anyway if curses has A_ITALIC but the terminal has no sitm. That
format string is kinda bad.
2020-02-06 18:48:49 -05:00
C. McEnroe e1f10958c9 Never consider notices hot 2020-02-06 04:37:28 -05:00
C. McEnroe 32ec697092 Handle mentions 2020-02-06 04:18:15 -05:00
C. McEnroe 30b3780e57 Route own query messages correctly 2020-02-06 04:01:11 -05:00
C. McEnroe 1e6e533538 Send CAP END if CAP LS doesn't list anything good 2020-02-06 03:44:49 -05:00
C. McEnroe 5e98d83f83 Handle TOPIC and replies 2020-02-06 02:07:39 -05:00
C. McEnroe 5fb492f8cd Handle PART 2020-02-06 01:16:35 -05:00
C. McEnroe db499dc5f5 Send self.join without colon
If someone is weird enough to use channel keys, they can -j '#foo key'.
2020-02-06 01:03:21 -05:00
C. McEnroe 3085779d86 Handle ERROR 2020-02-05 23:27:43 -05:00
C. McEnroe 7414a8a11c Save own username for message echoing 2020-02-05 00:40:24 -05:00
C. McEnroe 37ec1e8232 Align MOTD after - 2020-02-05 00:24:54 -05:00
C. McEnroe de4c9df074 Align join messages after nick 2020-02-04 20:40:49 -05:00
C. McEnroe ea93c9a6d9 Set self.color 2020-02-04 20:27:18 -05:00
C. McEnroe d57df09511 Align word wrapping with tab character
Also fixes handling whitespace directly after control codes.
2020-02-04 19:50:23 -05:00
C. McEnroe 26e9dd9adf Use time_t rather than struct tm 2020-02-03 18:41:52 -05:00
C. McEnroe 2f9a9c663a Remove services TODO
Two goals:

 1. Messages should always be routed to the same place.
 2. You should be able to see your messages to *Serv and its responses
    together.
2020-02-02 17:50:28 -05:00
C. McEnroe aec28a9327 Check queries against chanTypes 2020-02-02 17:45:19 -05:00
C. McEnroe 0d6a60cc66 Save NETWORK, CHANTYPES, PREFIX from ISUPPORT 2020-02-02 17:37:36 -05:00
C. McEnroe b535f0abdd Handle notices and actions 2020-02-02 17:26:20 -05:00
C. McEnroe dce7891331 Add extremely basid handlePrivmsg 2020-02-02 03:43:18 -05:00
C. McEnroe 052cd2ed26 Remove style string macros 2020-02-02 03:34:05 -05:00