James Lu
b9aee6ae85
Irc: only apply encoding settings on connect
...
Changing the encoding after a connection has been established is somewhat dangerous, because it's possible to corrupt channel/user state if characters in the old encoding are no longer valid.
Also, mark this option as experimental.
2017-06-02 07:31:49 -07:00
James Lu
1ff027152a
Irc: remove outdated cert/keyfile comment
2017-05-28 20:09:26 -07:00
James Lu
2737b6bbfc
Irc: simplify _send() code and replace unencodable characters
2017-05-27 02:21:12 -07:00
James Lu
1246edaf2c
Irc: initial work on encoding support ( #101 )
2017-05-27 01:27:09 -07:00
James Lu
ead20f5be9
Irc: log full tracebacks when disconnecting due to an error
2017-05-16 16:30:03 -07:00
James Lu
fd3236ddb7
Irc: fix another CPU loop on 'disconnect'
2017-05-12 19:52:40 -07:00
James Lu
daa6593534
Irc: block when the queue is empty instead of needlessly polling it
...
Rework Irc.processQueue() to block when the queue is full, and abort if the item "None" is sent to it.
To make sure that the None isn't caught by a full queue or pushed back by other elements, this modifies queue.Queue's underlying deque instance directly.
Closes #459 .
2017-05-12 17:55:24 -07:00
James Lu
06d49f4433
Revert "Irc: only disconnect the write portion of the socket"
...
This reverts commit f4babc6f28
.
2017-05-12 17:19:16 -07:00
James Lu
7daef0000b
Irc: break out of processQueue properly when a network disconnects
2017-05-09 23:31:20 -07:00
James Lu
701f01fa4f
Irc: reword error message from last commit to be more concise
2017-05-09 18:19:35 -07:00
James Lu
bac6dc36b4
Irc: log socket.send() errors with a proper traceback
2017-05-09 18:06:51 -07:00
James Lu
4ca8667669
Irc: fix 62aea23879
(lowercase queue)
2017-05-07 17:34:04 -07:00
James Lu
62aea23879
Irc: fix throttle_time not actually blocking for the defined amount of time
...
Passing the timeout to queue.Queue.get is invalid because it'll only block if there ISN'T any text to send.
2017-05-07 17:31:31 -07:00
James Lu
15ed251ed7
Irc: refuse to queue send data if aborted is set
2017-05-07 13:46:25 -07:00
James Lu
de67fe0d37
Irc: log socket shutdown errors to debug
2017-05-07 13:46:15 -07:00
James Lu
f4babc6f28
Irc: only disconnect the write portion of the socket
...
Per https://docs.python.org/3/howto/sockets.html#disconnecting
2017-05-07 13:46:06 -07:00
James Lu
5d629f7331
matchHost: extend negation via "!" to regular hostmasks as well as exttargets
2017-05-04 19:04:03 -07:00
James Lu
6d96dd21ac
updateTS: remove usage of mutable as function default argument
...
This may subtly break things: https://docs.quantifiedcode.com/python-anti-patterns/correctness/mutable_default_value_as_argument.html
2017-04-09 14:45:12 -07:00
James Lu
348572bcb6
Irc: rewrite sendq to use queue.Queue, and add an upper bound (maxsendq)
...
Closes #430 . Closes #442 .
2017-03-31 17:41:56 -07:00
James Lu
9d9b01839c
Split Irc.reply() into _reply() to make 'networks.remote' actually thread-safe
...
Previously, the Irc.reply_lock check was in the reply() function itself: replacing it with another function checking for the same lock would delay execution,
but then run the wrong reply() code if another module used irc.reply() while 'remote' was executing.
2017-03-31 16:25:28 -07:00
James Lu
ae6c68018b
core: half the default throttle time (from 0.01 to 0.005)
2017-03-28 22:38:54 -07:00
James Lu
938a1fb9d7
Irc: reorder comments from last commit
2017-03-26 14:25:02 -07:00
James Lu
397df48efd
Irc: simplify runloop error catching, adding RuntimeError and SystemExit ( closes #438 )
...
socket.error is aliased to OSError since Python 3.3, and ConnectionError is actually a subclass of OSError.
So, it makes more sense to just catch the more generic type here.
Also, make ProtocolError derive from RuntimeError instead of Exception.
2017-03-26 14:17:37 -07:00
James Lu
e3c0bf6a1b
Irc: break out of processQueue as soon as self.aborted is set
2017-03-24 18:40:02 -07:00
James Lu
99d3780773
Irc: add locking for reply() calls ( #437 )
2017-03-24 00:57:21 -07:00
James Lu
ff6d961922
Protocol: add missing self in hasCap()
2017-03-23 22:41:12 -07:00
James Lu
f512ae1b33
Protocol: add a hasCap() wrapper function ( #337 )
2017-03-15 23:46:13 -07:00
James Lu
2ca0cf05a0
Start work on protocol capabilities ( #337 )
2017-03-15 23:32:47 -07:00
James Lu
afc5cc26fa
Irc: more compact __repr__ for IrcChannel/IrcServer/IrcUser
2017-03-11 22:49:48 -08:00
James Lu
2028cab04c
core: Grow autoconnect delays by a configurable factor whenever connections fail
...
Closes #348 .
2017-03-11 00:21:30 -08:00
James Lu
9e50c5e69a
Irc: try to make breaking out of autoconnect loops faster
2017-03-10 23:57:37 -08:00
James Lu
3096c54bb8
Irc: return in msg() if the main client is missing and no explicit source is set
2017-03-10 23:47:07 -08:00
James Lu
9a9e0b2c20
Irc: deprecate the botdata field as well ( #273 )
2017-03-05 00:14:43 -08:00
James Lu
b4f70bdece
Irc: remove duplicate botdata assignment
2017-03-05 00:06:49 -08:00
James Lu
4284853a4a
Irc: remove internal use of 'conf' and 'botdata' ( #273 )
2017-03-05 00:06:44 -08:00
James Lu
7f070448b7
utils, Irc: add abstraction to warn on deprecated attribute usage ( #273 )
2017-03-05 00:00:26 -08:00
James Lu
5fe277f90d
Irc: mention CIDR matching ( #411 ) and casemappings in matchHost() desc.
2017-02-25 22:26:37 -08:00
James Lu
4df8567fa6
Irc: move PYLINK_DISCONNECT firing and connected.clear() into disconnect() ( #421 )
...
This may prevent extra irc.connected.clear() calls from messing with the was_connected state.
2017-02-25 22:06:43 -08:00
James Lu
7c0cb92696
Irc: hack in CIDR support in matchHost() ( #411 )
2017-02-24 22:27:26 -08:00
James Lu
04fa0520a6
Irc: make was_successful check the last Irc.connected state
2017-02-24 22:09:41 -08:00
James Lu
b30d696e3a
Irc: add "was_successful" data key to PYLINK_DISCONNECT
...
This stores whether the network was actually connected before this disconnect message fired (i.e. the disconnect wasn't caused by a configuration error, etc.)
2017-02-24 21:42:44 -08:00
James Lu
3d9f69dba7
Irc: deprecate checkAuthenticated()
2017-02-24 18:42:58 -08:00
James Lu
21cbcb8cf6
Irc: fix / simplify defaults in msg(), reply, error()
2017-02-24 16:28:23 -08:00
James Lu
12bb59d257
Irc: more parseArgs tweaks
...
- Make parsePrefixedArgs() a class method
- Split the input if parseArgs() is given a raw string instead of a list
2017-02-18 19:58:24 -08:00
James Lu
03fc16dd5a
Irc: rewrite parseArgs to be more efficient
2017-02-18 19:47:36 -08:00
James Lu
b3161d6d5d
Irc: add a getFullNetworkName() function
2017-02-18 13:32:48 -08:00
James Lu
2f968aca80
Irc: allow defaulting to private command replies ( Closes #409 )
...
Squashed commit of the following:
commit c168500235b65f833b1d7fe49ebde674159683ee
Author: James Lu <GLolol@overdrivenetworks.com>
Date: Thu Feb 16 17:33:36 2017 -0800
ServiceBot: default notice and private to None
This is so that it respects the changes from the last commit.
commit f685f3ef522f7f0ee356082c3c1b8b5a4e34b211
Author: James Lu <GLolol@overdrivenetworks.com>
Date: Thu Feb 16 15:10:33 2017 -0800
Irc: implement a prefer_private_replies option (#409 )
2017-02-16 17:41:07 -08:00
James Lu
7bbe77fe4a
Irc: remove unused "bot_clients" attribute
...
Thanks to @IotaSpencer for pointing this out!
2017-01-21 11:08:37 -08:00
James Lu
e2c0877e9b
wrapModes: optionally check for max. modes per line ( #253 )
2017-01-08 21:19:26 -08:00
James Lu
7594933550
parseModes: reorder logic so that -k * workarounds work again
...
Thanks @cooper for noticing this.
2017-01-08 17:31:50 -08:00
James Lu
d4b4cfb32e
wrap* funcs: convert input args to a list, so that pop(0) always works
2017-01-06 22:13:27 -08:00
James Lu
ba330bbfac
updateTS: don't save any broken TS values lower than 750000
...
Workaround for #385 , and other related timestamp issues caused by the TS value getting cut off in mode messages (#283 )
2017-01-06 21:56:22 -08:00
James Lu
a3ff32c22e
core: implement bind host support
...
Closes #379 .
2017-01-02 12:30:24 -08:00
James Lu
d1d3c3ef15
Irc: oops, wrapModes() needs to be a classmethod
2017-01-02 12:15:44 -08:00
James Lu
5843eebba2
Irc: add wrapModes() abstraction
2017-01-02 12:08:22 -08:00
James Lu
1a1dff7609
IrcChannel: don't assume +nt on new channels
...
Revert "classes.IrcChannel: default modes to +nt on join"
This reverts commit 1062e47b72
.
2017-01-01 00:37:12 -08:00
James Lu
a6b889c469
Irc: fix whitespace
2016-12-17 16:18:11 -08:00
James Lu
cbc7f438d2
clientbot: implement preliminary message tags parsing
...
Untested so far...
2016-12-16 22:28:22 -08:00
James Lu
e7e2f2c98e
core: update "missing dependencies" errors
...
Closes #363 .
2016-12-09 17:15:53 -08:00
James Lu
f9e798cf93
Irc: fix matchHost not using realhost [rp[er;y
2016-11-20 12:29:51 -08:00
Ken Spencer
02dfe5aeab
classes: pass force_privmsg_in_private and private booleans to irc.reply() in irc.error()
2016-11-18 23:10:45 -08:00
Ken Spencer
c450d71f84
classes: add irc.error() for easier error replies
2016-11-18 23:10:45 -08:00
James Lu
377df413ed
Irc: s/isServiceBot/getServiceBot/g ( #355 )
...
This function is renamed to better reflect its return value (ServiceBot object instead of boolean True).
2016-11-09 19:09:59 -08:00
James Lu
08fa64c3cc
Irc, services_support: store service name in IrcUser objects ( #355 )
2016-11-09 19:07:01 -08:00
James Lu
0815df1bca
Irc: rewrite isInternalClient to use getServer & return a boolean ( #355 )
2016-11-09 18:55:53 -08:00
James Lu
ddd0436937
Irc: rewrite getServer() to look for IrcUser.server attribute ( #355 )
...
The relevant attribute was introduced in c57fabc9ef
.
2016-11-09 18:55:08 -08:00
James Lu
c57fabc9ef
core, protocols: add server argument to IrcUser ( #355 )
2016-11-09 18:40:16 -08:00
James Lu
6ad40c91b4
Irc: explicitly kill connect loop threads after an Irc object has been removed
...
Possible fix for #351 .
2016-11-02 22:34:02 -07:00
James Lu
72ca41df33
Irc, clientbot: disallow unsetting bans that don't exist
...
This fixes an infinite loop when:
- Clientbot modesync is enabled
- 2 or more clientbot linked networks show unsetting modes that weren't enabled (e.g. charybdis)
- A user removes a ban
The workaround in clientbot prevents this process from triggering an infinite loop when a mode change acknowledgement is received for unsetting a non-existant ban,
though multiple -b mode changes may still be seen due to race conditions in updating the various networks' states.
2016-10-07 20:54:52 -07:00
James Lu
ec4e71c8cf
Irc: demote unknown user errors in parseModes() to DEBUG
...
Some ancient services like Anope 1.8 set SVS2MODE +d on users when they connect, even if the user quits right after. Due to lag we may receive the MODE after the QUIT instead of before.
2016-10-02 22:09:33 -07:00
James Lu
4dd0709f66
protocols, core: remove unused imports
2016-10-01 12:43:12 -07:00
James Lu
0a436cdf4c
Irc: make loopback hook in msg() optional
2016-08-31 18:28:13 -07:00
James Lu
87757a60a3
Irc: rename 'chandata' in SQUIT payload to 'channeldata'
2016-08-27 17:42:07 -07:00
James Lu
c68c941c1d
Irc.msg: break on empty text strings
...
Closes #306 .
2016-08-27 09:52:01 -07:00
James Lu
5908776a86
API CHANGE: Rename NotAuthenticatedError -> NotAuthorizedError
2016-08-25 00:43:44 -07:00
James Lu
a546bae341
Irc: make throttle time configurable per server (defaults to 0.01s)
2016-08-21 17:25:09 -07:00
James Lu
7a5b64bdc9
Irc: implement basic message queueing (1 message sent per X seconds)
...
Ref #293 .
2016-08-21 17:12:51 -07:00
James Lu
a76bd8c5b2
core: make hostmask fetching a shared function
2016-08-12 19:18:56 -07:00
James Lu
6828d032b4
Irc: RFC-standard umode +s does not take an argument
2016-08-11 18:14:35 -07:00
James Lu
ffdc313376
Irc: make hostname field optional in version()
...
Reported by Rascle via IRC.
2016-08-10 13:23:24 -07:00
James Lu
3633a41e4f
Protocol: return a mapping of channels->lists of nicks in SQUIT payloads
2016-08-08 20:58:34 -07:00
James Lu
12e1a0edff
Move handle_error() to the generic protocol
2016-08-08 18:12:07 -07:00
James Lu
9448bc86fd
Protocol: abort when receiving SQUIT to our own server
2016-08-04 12:55:24 -07:00
James Lu
b36ce36451
protocols: send old IrcServer object (serverdata) in SQUIT hooks
2016-08-04 12:50:04 -07:00
James Lu
4b27ebbee4
Irc: make sorting in joinModes() an option, and explicitly enable it in WHOIS output
...
This prevents mode lists from being sorted when they really shouldn't be, such as when relaying mode changes ("+qo nick nick" became +oq nick nick").
2016-07-31 21:45:38 -07:00
James Lu
d911045dca
Merge branch 'devel' of github.com:GLolol/PyLink into devel
2016-07-31 20:11:06 -07:00
James Lu
168f9f972d
classes: more tweaks to updateTS()
...
Really fixes #295 . Closes #298 .
2016-07-30 21:25:28 -07:00
James Lu
1ef89560e2
core: rename IrcUser.identified attribute to IrcUser.account
2016-07-29 20:16:05 -07:00
James Lu
891039dba2
Merge branch 'master' into devel
2016-07-29 14:44:54 -07:00
James Lu
2326f8b818
Irc: fix TS handling comparing against the wrong TS on outgoing sjoin()
...
Closes #295 .
2016-07-29 14:44:25 -07:00
James Lu
13c0e50358
Irc: make certfile/keyfile optional
...
This was never required for S2S links to work... Why did I think that?
2016-07-28 22:49:05 -07:00
James Lu
f4922743fc
core: SID and hostname options are now optional ( #282 )
...
Hostname defaults to a fallback hardcoded in world.fallback_hostname, while SID defaults to None (protocol modules have to deal with this themselves)
2016-07-28 22:23:59 -07:00
James Lu
f45cb3a583
classes: Drop FakeIRC, FakeProto
2016-07-28 22:03:44 -07:00
James Lu
852bd74c3b
core: enumerate our server after calling proto.connect()
...
This gives protocol modules a chance to manipulate their SID before it's added to the internal server list, replacing hacks previously used by the Nefarious and Clientbot modules.
This is the first step to sid-less servers :)
2016-07-28 21:50:51 -07:00
James Lu
c410de2fad
Make server config validation protocol specific
...
Closes #282 .
2016-07-28 21:34:00 -07:00
James Lu
4e3d209831
Irc: rework TS handling again
...
(cherry picked from commit 0e535a916c
)
2016-07-28 20:20:35 -07:00
James Lu
0e535a916c
Irc: rework TS handling again
2016-07-26 23:30:55 -07:00
James Lu
795c163a69
Irc: use int values for ircmatch casemapping
...
The ircmatch version with casemapping variables hasn't been released on pip yet.
(cherry picked from commit 39675e15e8
)
2016-07-23 21:52:23 -07:00
James Lu
39675e15e8
Irc: use int values for ircmatch casemapping
...
The ircmatch version with casemapping variables hasn't been released on pip yet.
2016-07-23 21:51:26 -07:00
James Lu
c6fcdd854c
parseModes: give prefix modes precedence over mode types
2016-07-21 19:11:19 -07:00
James Lu
eef54cd77d
classes: Move ISUPPORT-style PREFIX and capabilities handling to Protocol
2016-07-20 23:59:22 -07:00
James Lu
de618393c0
Fix SQUIT handling from 2f1a338
2016-07-20 23:55:34 -07:00
James Lu
154421ffde
Move SQUIT abstraction into core
2016-07-20 23:55:34 -07:00
James Lu
1770058e1b
Move ts6_common.parseTS6Args to ts6_common.parsePrefixedArgs
2016-07-20 23:55:34 -07:00
James Lu
3381dda884
Throw specific errors for missing ircmatch/setuptools libraries
2016-07-19 17:44:22 -07:00
James Lu
51457f3550
Irc: treat unicode case sensitively in toLower()
2016-07-13 13:38:56 -07:00
James Lu
35a9d7ccba
Irc: move self.aborted.clear() to connect()
2016-07-13 00:38:19 -07:00
James Lu
58d71b0907
classes.Protocol: use a lock with updateTS to ensure thread-safety
...
Closes #274 .
2016-07-12 22:08:01 -07:00
James Lu
2a08ae98b0
Irc: consistently sort getPrefixModes output
2016-07-11 15:21:17 -07:00
James Lu
c1cd6f42a0
updateTS: Fix mode tracking again
...
It looks like we actually do need to track whether we're sending or receiving modes. This time, do so /properly/.
2016-07-10 21:36:18 -07:00
James Lu
50d30d4e20
Irc: implement exttarget inversion ( #170 )
2016-07-07 11:18:06 -07:00
James Lu
183a4cbd75
core: add extban support in matchHost, and $account matching ( #170 )
...
The following forms are supported in $account, with groups separated by a
literal colon. All account and network name matching is currently case sensitive:
$account -> Returns True (a match) if the target is registered.
$account:accountname -> Returns True if the target's account name matches the one given, and the target is connected to the local network..
$account:accountname:netname -> Returns True if both the target's account name and origin network name match the ones given.
$account:*:netname -> Matches all logged in users on the given network.
2016-07-07 00:26:52 -07:00
James Lu
d3877b0194
Irc: introduce matchHost() wrapper around ircmatch
...
This makes the latter a core dependency. Refactor changehost and opercmds plugins to take advantage of this new core function.
2016-07-06 23:11:36 -07:00
James Lu
e0f050c195
Irc: add getFriendlyName() abstraction
...
Closes #260 .
2016-07-06 22:30:21 -07:00
James Lu
f8ca65cabc
Irc: warn when applyModes target doesn't exist
...
This can happen when a network disconnects while spawnClient is setting modes on a newly spawned client, for example...
2016-07-05 00:42:00 -07:00
James Lu
72c48502c6
Generate __init__.py with package version on runtime
...
Closes #259 . This removes world.version and replaces it with pylinkirc.__version__ where the former was used.
2016-07-03 00:26:03 -07:00
James Lu
e63a1bc739
Irc: remove leading 'pylinkirc.protocols.' from protoname values
2016-07-03 00:12:23 -07:00
James Lu
cc40cacb7a
Irc.joinModes(): sort mode list before formatting
2016-06-30 19:52:06 -07:00
James Lu
1ac1e3eca6
Irc: fix wrong target for reply()
2016-06-30 18:36:40 -07:00
James Lu
02405c36b5
core, fantasy: redo handling of noticed and/or private replies
...
New behaviour for command responses in general: FANTASY commands reply in channel as PRIVMSG, while all commands sent in PM reply as private notices.
- The old irc.called_by is now irc.called_in (PLACE last command was called)
- irc.called_by is now used to store the CALLER of the last command
- notice=True/False toggle is dropped from ServiceBot.call_cmd()
- New private=True/False option added to ServiceBot.reply() and irc.reply(), which controls whether replies should be sent privately or not.
2016-06-30 18:22:45 -07:00
James Lu
e4b400042e
core: make maxnicklen optional, defaulting it to 30
2016-06-27 22:39:18 -07:00
James Lu
9374bccb6f
Merge remote-tracking branch 'origin/master' into devel
2016-06-27 21:47:55 -07:00
James Lu
0fbf9e165c
Irc: forcibly disable SSLv2 and SSLv3
2016-06-26 10:02:27 -07:00
James Lu
9d7fb4ed70
updateTS: fix typo in error message
2016-06-25 14:00:26 -07:00
James Lu
fbeb3a3747
protocols: fix ts actually defaulting to None in sjoin()
2016-06-25 13:56:24 -07:00
James Lu
9ea6769c54
parseModes: allow type str as modestring
2016-06-25 13:08:49 -07:00
James Lu
5e16eeea41
updateTS: skip applying modes if there aren't any
2016-06-25 12:54:56 -07:00
James Lu
f009a739bc
Merge remote-tracking branch 'origin/master' into devel
2016-06-25 11:36:55 -07:00
James Lu
51f1506f90
updateTS: remove mentions of 'outbound' variable from logging
2016-06-25 11:34:14 -07:00
James Lu
4c00479d78
Irc: lower ping frequency & timeout to 90/180
...
180*3 seconds is equivalent to 9 minutes. That's a long time for a dead network to stay connected.
2016-06-24 18:14:03 -07:00
James Lu
167963ddc4
updateTS: fix handling for outbound modes
...
Outgoing and incoming modes should be handled the same way - we're only dealing with a "received TS" which could originate from PyLink (sjoin() in protocols) OR the uplink.
2016-06-24 13:24:44 -07:00
James Lu
7f829ba0ec
updateTS: apply TS on channel regardless of whether mode changes pass
2016-06-24 13:15:26 -07:00
James Lu
f2b139c828
core: make inbound SJOINs also respect the updateTS() rules
2016-06-22 22:28:15 -07:00
James Lu
6b8e80cd5b
core/protocols: add modes option in sjoin(), TS6 BMASK, and mode TS rules in updateTS()
...
Closes #249 .
Closes #250 .
2016-06-22 21:34:16 -07:00
James Lu
dd08c01791
Irc: default pingTimer to None before starting connections
...
(cherry picked from commit 42ec6f2502
)
2016-06-21 20:34:48 -07:00
James Lu
42ec6f2502
Irc: default pingTimer to None before starting connections
2016-06-21 10:54:07 -07:00
James Lu
481d70eff8
New import paths for properly installed pylinkirc
2016-06-20 18:18:54 -07:00
James Lu
f555a484f9
Irc: unconditionally call disconnect() on errors or ping timeouts
...
This prevents duplicated ping timer threads from spawning, I think...
2016-06-15 10:55:47 -07:00
James Lu
b1a5f864d8
Irc: resolve hostnames when connecting
...
Cloeses #158 .
2016-06-11 11:29:11 -07:00
James Lu
eeca570cc4
classes: make pingfreq consistent, bump timeouts
2016-06-06 07:34:48 -07:00
James Lu
553415f6f7
classes: higher default pingfreq (90)
2016-05-25 16:19:35 -07:00
James Lu
2e1163fdb8
Irc: introduce isServiceBot checker
2016-05-14 16:17:12 -07:00
Daniel Oaks
c3e4cfa2de
games: Create BotClient class, use bot_clients instead of games_user
2016-05-14 14:53:19 -07:00
James Lu
32bc5f120b
core: migrate the main client to ServiceBot ( #216 )
...
- irc.spawnMain is dropped. Clients are now spawned in the endburst loop, after protocol negotiation completes. This allows PyLink to spawn clients with hideoper, etc., closing #194 .
- utils.add_cmd and irc.callCommand are now just wrappers around world.services['pylink'].add_cmd and call_cmd respectively.
- coreplugin registers the main client while it is loaded up, before any commands are added.
2016-05-14 13:29:23 -07:00
James Lu
9236f7e095
Irc: fix NameError caused by 0c7faed
2016-05-14 12:19:38 -07:00
James Lu
123e72d162
Merge branch 'devel' into wip/services
2016-05-14 11:58:49 -07:00
James Lu
33034b23f1
Irc.applyModes: assume modes are being added if no +/- is given
2016-05-14 11:58:22 -07:00
James Lu
0c7faed213
Move NotAuthenticatedError class back into utils
...
This is needed because ServiceBot exists in utils, and utils cannot import classes without a bad import loop happening.
2016-05-14 10:05:18 -07:00
James Lu
beae4eea9e
core: rename utils.fullVersion -> irc.version ( #199 )
2016-04-30 17:00:28 -07:00
James Lu
3bb1208e74
core: move toLower to Irc ( #199 )
2016-04-30 16:57:38 -07:00
James Lu
2fe2e9c8c4
core: move isOper, checkAuthenticated to Irc ( #199 )
2016-04-30 16:54:11 -07:00
James Lu
78f8a2fc8d
core: move isManipulatableClient, getHostmask to Irc
2016-04-30 16:44:37 -07:00
James Lu
064cb9b6aa
core: move reverseModes, joinModes into Irc
2016-04-30 16:33:46 -07:00
James Lu
bd0874a484
Merge branch 'wip/split-utils' into devel
2016-04-29 23:32:52 -07:00
James Lu
3b04d1abdc
Irc: raise connection failure log levels to error
2016-04-25 19:14:34 -07:00
James Lu
84822fb1d6
Move applyModes, parseModes into Irc, suppressing deprecation warnings for now ( #199 )
2016-04-24 21:44:27 -07:00
James Lu
7f46e1c35c
Separate KeyedDefaultdict into new structures module ( #199 )
2016-04-24 21:11:36 -07:00
James Lu
534242ef29
Irc: fix disconnect logic in ping timeouts
...
Call disconnect() in the event of a ping timeout. Curse these extra indents!
2016-04-18 18:14:42 -07:00
James Lu
0f0ae8fc2f
Protocol: remove desync warning in getUid
2016-04-15 11:37:53 -07:00
James Lu
3a00e46b48
Move getSid/getUid into classes.Protocol
2016-04-10 19:00:44 -07:00
James Lu
99d861861d
Let's use a default pingfreq value that makes sense...
...
Change this from 30 seconds to 180. Even for semi-important servers, 30 seconds between PING requests is a bit overkill.
2016-04-07 18:45:42 -07:00
James Lu
16779aa5ce
classes: remove lower() call when storing netname
...
An hour of debugging protocol/unreal and it turns out the issue was not there, but this.
2016-04-02 12:11:35 -07:00
James Lu
3e7255e4b2
classes: remove ts6-specific hack in Protocol.removeClient
2016-04-01 22:55:03 -07:00
James Lu
44083ccd5e
core: Store opertype info in all IrcUser objects
...
This allows plugins to define custom opertypes for their clients, and still have them show in WHOIS queries.
2016-03-26 12:55:23 -07:00
James Lu
fbd8659a7d
classes: spawn PyLink clients with a custom opertype
2016-03-26 12:49:10 -07:00
James Lu
45c2abdae7
Irc: run initVars() on connect too
...
2b16f25b61
is wrong; it caused reconnects to fail with disconnect loops.
2016-03-25 17:14:16 -07:00
James Lu
b2b04c8e75
classes: really ignore errors when shutting down sockets
2016-03-25 17:03:25 -07:00
James Lu
03b53aee59
Merge branch 'staging' into devel
2016-03-25 15:03:05 -07:00
James Lu
2b16f25b61
classes.Irc: clear state on disconnect, not on connect
...
Possible fix for #183 - when networks disconnect, their server index wasn't cleared properly, causing errors from servers already existing to be thrown when the same server name is spawned again.
2016-03-25 15:00:15 -07:00
James Lu
1930739aad
Revert "Irc: don't call initVars() on IRC object initialization"
...
This reverts commit 5a68dc1bc5
.
2016-03-25 14:54:29 -07:00
James Lu
f5f0df52ce
classes: raise KeyError, not return KeyError...
2016-03-19 18:00:44 -07:00
James Lu
e948db5c7b
classes: support looking at older versions of prefix modes mappings
2016-03-19 17:54:18 -07:00
James Lu
e8b0018585
classes: Implement IrcChannel.is(Voice|Halfop|Op)Plus ( #168 )
2016-03-19 17:37:38 -07:00
James Lu
ed333a6d1b
classes: implement IrcChannel.isOp, isVoice, getPrefixmodes, etc
...
Ref #168 .
2016-03-19 17:32:32 -07:00
James Lu
8135f3a735
core: Depluralize prefixmodes mappings ( #168 )
...
This is an API breaking change. I really don't know why I made these keys plural to start, since it only made things more complicated. Prefix modes are not pluralized in the list of supported modes of each IRCd.
2016-03-19 17:25:04 -07:00
James Lu
1d4350c4fd
classes: provide IrcChannel objects with their own name using KeyedDefaultdict
...
Closes #171 .
2016-03-19 17:01:39 -07:00
James Lu
b6889fb097
irc: fix spacing in certificate fingerprint logging
2016-03-07 20:30:24 -08:00
James Lu
cf15bed58d
classes: add services_account field in IrcUser ( #25 ), default 'identified' attribute to empty string instead of None
2016-02-07 18:11:09 -08:00
James Lu
0d4655c381
core: support multiple channel loggers with DIFFERENT log levels & fix example conf ( #83 )
2016-01-30 23:35:51 -08:00
James Lu
669e889e6f
Support configurable SSL fingerprint hash types ( Closes #157 )
2016-01-30 23:04:13 -08:00
James Lu
14efb27fe8
Initial experimental support for logging to channels ( #83 )
...
Doesn't support rehashing and all that yet.
2016-01-23 13:52:37 -08:00
James Lu
5a68dc1bc5
Irc: don't call initVars() on IRC object initialization
...
This is already done in connect(), so it isn't really necessary to populate these variables when first connect hasn't happened yet.
2016-01-23 13:52:37 -08:00
James Lu
812a866a4e
protocols: rename pingServer -> ping
2016-01-16 17:11:23 -08:00
James Lu
3a53005d8c
protocols: messageClient -> message, noticeClient -> notice
2016-01-16 16:44:23 -08:00
James Lu
acdd7dbb78
protocols: rename joinClient(...) -> join(...)
2016-01-16 16:36:45 -08:00
James Lu
925e11d6c4
classes.Irc: when disconnecting, suppress socket read errors in run() ( #152 )
2016-01-09 20:25:53 -08:00
James Lu
cf2fcf9263
classes.Irc: only allow one shutdown sequence at a time ( #152 )
2016-01-09 20:25:53 -08:00
James Lu
f70ca54ae4
classes: IRC object disconnect tweaks (really fixes #152 )
...
- disconnect() was missing a socket.shutdown() cause, as socket.close() does NOT cause connections to close immediately! https://docs.python.org/3/library/socket.html#socket.socket.close
- Merge _disconnect() and disconnect(), the latter was just a wrapper with little use
2016-01-09 20:04:10 -08:00
James Lu
b1aa4c2ec5
classes: show instance type in classes.IrcUser/IrcChannel/IrcServer
2016-01-09 19:15:39 -08:00
James Lu
0c48ea6791
Merge branch 'staging' into devel
...
Fix #154 . This everts what was done to address #152 , but unclean shutdowns are not as bad as having the server fork endlessly!
2016-01-07 22:08:12 -08:00
James Lu
a385bc32d9
Revert "classes: replace threading.Timer with normal threads for schedulePing"
...
This reverts commit 64bb646d1e
.
2016-01-05 19:35:16 -08:00
James Lu
a7104dc01c
Revert "classes: actually, loop schedulePing only when connection_thread is alive"
...
This reverts commit 124100fcf5
.
2016-01-05 19:35:15 -08:00
James Lu
6577013ada
Irc: Return False instead of None when isInternalClient fails to find a match
2015-12-31 17:53:33 -08:00
James Lu
eac934c237
classes: sort code, move nickToUid, clientToServer, isInternalClient, isInternalServer into the Irc class
...
The following BREAKING changes are made:
utils.nickToUid(irc, nick) -> irc.nickToUid(nick)
utils.isInternalClient(irc, uid) -> irc.isInternalClient(uid)
utils.isInternalServer(irc, uid) -> irc.isInternalServer(uid)
utils.clientToServer(irc, uid) -> utils.getServer(uid)
2015-12-31 17:28:47 -08:00
James Lu
124100fcf5
classes: actually, loop schedulePing only when connection_thread is alive
...
Related to #152 . Probably still not perfect, but shutdowns are somewhat faster than they were before.
2015-12-29 11:36:39 -08:00
James Lu
91f75e4d93
classes: Don't require self.connected to be set for "No data received" disconnects
...
Previously, this would've caused an infinite loop if a socket closed (e.g. from server shutdown) while PyLink was connecting.
2015-12-29 11:23:06 -08:00
James Lu
64bb646d1e
classes: replace threading.Timer with normal threads for schedulePing
...
Closes #152 .
2015-12-29 10:58:22 -08:00
James Lu
11b8821228
classes: log raw hook data for reference
2015-12-26 16:43:40 -08:00
James Lu
01a4da5d3a
classes: Fix another missing docstring
2015-12-26 14:47:23 -08:00
James Lu
fbf33e15a6
classes: in Irc.runline(), return the parsed hook args after processing
2015-12-22 10:46:54 -08:00
James Lu
e4fb64aeba
Document more parts of the core - comments are cool right
2015-12-06 17:40:13 -08:00
James Lu
b0e66ddd6e
classes: log offending hook data when a hook function errors
...
Closes #126 .
2015-11-08 10:56:09 -08:00
James Lu
2eeba50a2a
Modularize TS updating code ( Closes #129 )
2015-11-08 10:49:09 -08:00
James Lu
e4cfd1e1e6
Irc: log unrecognized commands to INFO too
2015-10-23 19:07:17 -07:00
James Lu
e942b411f1
classes: introduce irc.reply()
2015-10-23 18:29:01 -07:00
James Lu
f80b383d06
Irc: actually abort when handle_events errors
2015-10-09 21:35:42 -07:00
James Lu
4e2876104f
Irc: require autoconnect value to be >= 1
...
This prevents sending a flood of connects whenever a server is unreachable.
2015-10-02 23:21:40 -07:00
James Lu
1c8ee5d84b
core: support IPv6 connections
2015-10-02 23:17:57 -07:00
James Lu
7e57798f4d
core: refresh various serverdata attributes on REHASH
2015-10-02 23:17:55 -07:00
James Lu
55d9eb240f
classes.Irc: prettier __repr__
2015-09-28 19:25:45 -07:00
James Lu
e84a2d1025
Modularize our import hacks, make Irc() take a conf object again
2015-09-28 19:12:45 -07:00
James Lu
bbedd38703
world: rename command_hooks=>hooks, bot_commands=>commands
2015-09-27 10:53:25 -07:00
James Lu
97a135a6f1
classes: add special PYLINK_SELF(PRIVMSG/NOTICE) hooks for command loopback
2015-09-26 10:20:23 -07:00
James Lu
034731ab1e
core: log which plugin is being called when calling hooks
2015-09-26 10:20:23 -07:00
James Lu
822544e3cc
core: keep track of where last command was called & make command calling a shared function
...
Prerequisite for FANTASY command implementation (#111 ).
2015-09-26 10:20:23 -07:00
James Lu
c77d170765
Move parseArgs and removeClient into the base Protocol class
...
These aren't really TS6-specific, and can be useful anywhere.
2015-09-24 18:03:30 -07:00
James Lu
19c4c2ce3f
classes: split up run() into run() and runline()
...
This helps the debugging process, by allowing us to also inject lines directly into the protocol module.
2015-09-19 10:31:43 -07:00
James Lu
fb91ff8ea3
Remove allow_abcd attributes from protocols (not needed anymore)
2015-09-17 19:07:37 -07:00
James Lu
069cd62865
core: allow marking spawned clients as manipulatable or protected
...
This flag determines whether the client should be manipulated by commands like bots.py's MODE/QUIT/JOIN commands, or protected from them (services).
2015-09-17 19:01:54 -07:00
James Lu
b87e34efa2
Slightly more consistent logging format...
2015-09-16 21:32:27 -07:00
James Lu
7ced47e9b3
bots: don't allow setting umode +o on InspIRCd users (forbidden and causes desync)
2015-09-14 18:09:39 -07:00
James Lu
c5b6658200
bots: more validation in "MODE" to prevent bad things from happening
...
This adds a new "allow_forceset_usermodes" attribute to protocol modules, which determines whether the IRCd allows us to force usermode changes on other servers' clients.
Also, make sure our target is a valid nick/UID/channel, and that the parsed modes are not empty!
2015-09-14 17:46:20 -07:00
James Lu
fd16a42708
Irc: log the offending line when an error is caught in handle_events
2015-09-13 17:58:59 -07:00
James Lu
a28715c2c6
IrcChannel: allow .deepcopy()
2015-09-13 13:47:04 -07:00
James Lu
46fab1cab7
classes.FakeProto: store UIDs as strings
2015-09-12 22:26:38 -07:00
James Lu
3a8d3d146c
protocols: make "uidgen" a protocol instance attribute
2015-09-12 16:02:51 -07:00
James Lu
df42a81191
classes/protocols: store server descriptions internally
...
Closes #106 .
2015-09-12 12:07:59 -07:00
James Lu
3217f726f8
Fix those test cases again.
2015-09-06 23:39:10 -07:00
James Lu
62e7cc4fca
move utils.msg() => classes.Irc.msg()
...
New function gets an extra (optional) "source" argument for specifying a sender UID. It's also shorter since no IRC object has to be passed to utils.
2015-09-06 22:23:44 -07:00
James Lu
57da0aa3b3
Classify all our protocol modules - why didn't I do this earlier
2015-09-05 18:00:57 -07:00
James Lu
eac81de176
Irc: add internal support for aborting connections
...
New "aborted" threading event, which can be set to True in order to stop the existing run() loop
Autoconnect confirmed to work with this.
2015-09-02 22:06:18 -07:00
James Lu
5480ae14c4
classes: Remove "opertype" IrcUser() argument
...
This is useless and should've never been here, oops.
2015-08-31 14:11:12 -07:00
James Lu
f9b4457ced
Decorate relay clients, etc. with custom OPERTYPEs
...
New PyLink internal hook: PYLINK_CLIENT_OPERED, called (supposedly) when a client opers up.
2015-08-31 13:31:20 -07:00
James Lu
1062e47b72
classes.IrcChannel: default modes to +nt on join
...
This may have regressions; who knows...
2015-08-31 09:09:03 -07:00
James Lu
d270a18285
Remove unused imports
2015-08-30 12:53:30 -07:00
James Lu
549a1d1ba4
classes: IrcServer.users is now a set()
2015-08-29 12:35:06 -07:00
James Lu
adb9ef13a6
classes: fixes for the test API
...
- fakeirc: drop dummyhook, call hooks in run() - the protocol module doesn't do this for us anymore
- Irc: don't thread if we're in test mode (temp. hack for now)
2015-08-29 10:10:45 -07:00
James Lu
973aba6de7
Move utils' global variables to world.py
2015-08-29 09:39:33 -07:00
James Lu
b71e508acc
classes.Irc no longer needs a conf argument; tweak tests again
2015-08-28 19:38:16 -07:00
James Lu
ad5fc97e21
Many fixes to test API, utils.reverseModes stub
2015-08-28 19:28:06 -07:00
James Lu
3d621b00df
Move checkAuthenticated() to utils, and give it and isOper() toggles for allowing oper/PyLink logins
2015-08-25 20:47:21 -07:00
James Lu
090fa85a46
Move Irc() from main.py to classes.py
...
This prevents import loops (main->utils->classes->main) from the changes in the next commit.
2015-08-25 20:37:47 -07:00
James Lu
1a57dfcdc3
prs+IrcUser: add incoming (handle_away) and outgoing (awayClient) AWAY handling
2015-08-12 04:17:01 -07:00
James Lu
254ccea0a3
remove some debugging cruft and unused imports
2015-07-23 11:46:45 -07:00
James Lu
8a1f965303
Consistently use applyModes in spawnClient, so user modes are stored like ('o', None) instead of ('+o', None)
...
Drop the 'modes' argument in IrcUser, for this is incorrect.
2015-07-22 21:14:22 -07:00
James Lu
686467ffa6
Remove endburst toggling in spawnServer, has_bursted IrcServer flag
...
Neither are being used at all; they're essentially dead code.
2015-07-22 20:39:38 -07:00
James Lu
b1e409ff3e
relay: unbreak topic handling ( closes #68 )
...
Introducing a new .topicset attributing in IrcChannel denoting whether we've received a TOPIC for this channel from the uplink yet.
2015-07-20 13:18:04 -07:00
James Lu
a51cfcb7b2
Fix fakeirc and tests for relay ( #56 )
2015-07-17 22:52:55 -07:00
James Lu
d97fce8205
IrcUser & pr/insp: Implement user channel tracking
2015-07-16 12:20:40 -07:00
James Lu
67f5bbba4b
add a utils.started threaded trigger, so plugins can ACTUALLY wait until all Irc objects have been initialized to do their work
2015-07-13 16:07:55 -07:00