James Lu
880b59c2c1
utils.isOper: check for both umode +o and login status
...
Also, make commands.status show this isOper result.
2015-08-02 19:41:40 -07:00
James Lu
3646930d34
relay: disable "you must in a share channel" messages; they're buggy
2015-07-29 04:02:45 -07:00
James Lu
7db1648438
relay: (possibly) block relaying events to disconnected networks
2015-07-25 22:56:34 -07:00
James Lu
4d7d7ce428
relay: Only block once per IRC object, ever.
...
Closes #59 ?
2015-07-25 22:54:02 -07:00
James Lu
a38fe1ab90
Fix #74 for real?
2015-07-25 22:11:41 -07:00
James Lu
e354ada838
relay: fix nick collision loop on SAVE + when both tagged UID and untagged UID exist on one net
...
This fixes a clash when for example: both 42XAAAAAA and _42XAAAAAA exist on a network, and PyLink tries to relay both nicks as _42XAAAAAA/network.
Also, this adds an oldnick argument to the SAVE protocol handler, which is then used by relay.normalizeNick to check whether the original pre-SAVE nick is also in use, in the event of nick collisions.
2015-07-25 18:27:30 -07:00
James Lu
c07cfb13df
relay: fix checks of DELINK must having a network parameter on a relay's home network
2015-07-25 16:56:48 -07:00
James Lu
b681a675eb
relay: only join users once, returning if there are no queued users at all
...
Closes #71 , prevents op floods on multiple SJOIN being sent. Also, this squashes AssertionErrors raised by protocol modules in sjoinServer, when we try to join zero users to a channel!
2015-07-25 11:03:27 -07:00
James Lu
7daa595a7b
relay: fix opmodes not actually being coersed properly
...
Modepair is set before the coersing phase and never updates; whoops!
2015-07-25 10:43:47 -07:00
James Lu
25da086a6b
Merge branch 'master' into wip/relay-no-duplicate-modes
2015-07-25 10:18:08 -07:00
James Lu
ee1267f06e
relay: fix use of incorrect variable in logging
2015-07-24 21:12:33 -07:00
James Lu
146ab5e444
ts6: support +AOS charybdis extension modes, warning if the IRCd doesn't support them
...
Also, add 'adminonly' (+A) to relay's whitelist.
2015-07-24 20:55:48 -07:00
James Lu
e4da670ae0
relay: propagate SAVE as NICK changes for non-relay users!
2015-07-24 18:29:59 -07:00
James Lu
a4da9b5324
protocol/relay: fix handling of KILLs sent to non-relay users
2015-07-24 18:26:31 -07:00
James Lu
007a1d9389
Merge branch 'master' into devel
2015-07-24 11:09:53 -07:00
James Lu
71a3464e8a
relay: also quit users who aren't on any shared channels after KICK
2015-07-24 10:51:16 -07:00
James Lu
5c3466bf82
relay: briefly workaround #74 by reordering our user checks
2015-07-24 10:50:39 -07:00
James Lu
254797dcfd
relay: remove servprotect from umode whitelist for now..
2015-07-23 18:05:13 -07:00
James Lu
dc7edf542a
relay: fix error on handle_part if remote network has no link
2015-07-23 14:34:56 -07:00
James Lu
d213429559
Revert "relay: when filtering modes, ignore internal mode-type lists (modenames starting with *)"
...
This reverts commit 4ce377944c
.
2015-07-23 14:30:48 -07:00
James Lu
0575de1fac
Support noctcp (+C) on charybdis, and wallops (+w) in relay
2015-07-23 13:45:38 -07:00
James Lu
4ce377944c
relay: when filtering modes, ignore internal mode-type lists (modenames starting with *)
2015-07-23 13:36:40 -07:00
James Lu
254ccea0a3
remove some debugging cruft and unused imports
2015-07-23 11:46:45 -07:00
James Lu
83494482a2
relay: don't ever quit the main client or part it from autojoin channels
2015-07-23 11:44:38 -07:00
James Lu
cbe7fa539f
relay: remove more spurious "you must be in channel" messages
2015-07-23 11:41:33 -07:00
James Lu
58a8d7134c
Fix handling of inbound CHG*
2015-07-23 11:02:32 -07:00
James Lu
8799e1ccc8
spawnClient: add ts as opt. argument; relay: spawn pseudoclients w/ TS of original user
2015-07-23 00:11:24 -07:00
James Lu
44e07b0c2f
relay: don't error if the WHOIS target isn't a relay user... oops
2015-07-23 00:10:54 -07:00
James Lu
a7f977aa3b
Add whois handlers for channel lists, user modes, and signon time, and relay user information
...
New API: utils.whois_handlers allows one to add functions taking (irc, target) and returning (irc numeric, reply text)
Closes #72 .
2015-07-23 00:01:51 -07:00
James Lu
8c1e1c18f1
relay: Factorize relayJoins usage in initializeChannel and truly fix #74 .
...
Squashed commit of the following:
commit 4e481f15db372d5c07f30e92f6581ea93692695b
Author: James Lu <GLolol1@hotmail.com>
Date: Wed Jul 22 19:28:34 2015 -0700
relay: Factorize relayJoins usage in initializeChannel and truly fix #74 .
The real error was that queued_users was being defined in the wrong spot (outside of the for loop),
so the user list would grow larger and larger with every network initialized.
This reverts parts of the previous commit which weren't actually necessary.
commit 76cc6bfbc71439880f01891f944600a26ff81130
Author: James Lu <GLolol1@hotmail.com>
Date: Wed Jul 22 13:34:47 2015 -0700
Mark users as internal at the IrcUser level (attempt to fix #74 )
2015-07-22 19:29:58 -07:00
James Lu
3eb54c479a
admin: clearer command help?
2015-07-22 13:18:11 -07:00
James Lu
c889cf6513
relay: only check for duplicate modes if prefix is '+'
2015-07-21 23:58:28 -07:00
James Lu
48aa0c3160
relay: rebase "no duplicate modes" branch over devel
...
Conflicts:
plugins/relay.py
2015-07-21 23:55:28 -07:00
James Lu
7b84bda11b
relay: refactor getLocalUser to accept a targetirc argument; fix MODE and KICK relaying
...
Closes #76 .
2015-07-21 23:53:59 -07:00
James Lu
a1fc6d6734
relay: attempt to fix kick relaying ( #76 )
2015-07-21 22:14:53 -07:00
James Lu
6abb56921e
relay: fix DELINK delinking more networks than the current one
2015-07-21 20:18:35 -07:00
James Lu
a04bce99c1
fix 8f13ae77
, again...
2015-07-21 20:13:43 -07:00
James Lu
e2738e3909
utils.applyModes: fix prefixmodes lists not being updated...
2015-07-21 19:57:22 -07:00
James Lu
3b79adf4e5
relay: Fix remoteuser being None for spawned pseudoclients
...
We're supposed to ignore these anyways... Closes #74 .
2015-07-21 19:29:09 -07:00
James Lu
8f13ae778a
Fix regression in 024ac165
that caused channel messages to only be sent to one other net, instead of all relay links
2015-07-21 19:27:41 -07:00
James Lu
ea7681502f
fix some bugs, introduce others
2015-07-21 17:33:36 -07:00
James Lu
c0f82597a5
relay: don't spawn new pseudoclients for mode changes
2015-07-21 16:07:09 -07:00
James Lu
9b8ef0a45d
make relay and ts6 a bit less, well, buggy
2015-07-21 12:44:01 -07:00
James Lu
73c41b4363
relay & ts6: miscellaneous fixes?
2015-07-20 23:36:26 -07:00
James Lu
72be5ca79c
inspircd: make handle_part return a list of channels, not just one
...
Some IRCds, like TS6, allow sending multiple channels (as a comma-separated list) in PART.
Update relay accordingly.
2015-07-20 19:52:52 -07:00
James Lu
ef3aab69f2
relay: make '/' support in nicks explicit instead of implicit
2015-07-20 16:50:18 -07:00
James Lu
65ef27fd4b
relay: initial nick collision handling via SAVE ( Closes #61 )
2015-07-20 14:37:04 -07:00
James Lu
ad34f6c4f9
relay: make separator a per-network config option
2015-07-20 14:36:47 -07:00
James Lu
2bc0a65128
relay: hack to support sending to @#channel, etc.
2015-07-20 13:45:15 -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
e76d31d14e
relay: fixes to KICK handling, don't allow spawning new pseudoclients for trivial tasks like TOPIC or PART
...
This introduces a new spawnIfMissing option in getRemoteUser, which defaults to True and toggles spawning new pseudoclients if one is not found for a certain network.
In the case of TOPIC or PART being sent, we'll want this turned off because we can either 1) route these through our PyLink server SID, or 2) ignore these entirely.
For KICK handling, this commit fixes kicks sent from servers or clients that don't have a pseudoclient on the target network, by tagging them in the message and routing them through our main PyLink SID.
Normal kicks still behave as usual:
* You have been kicked from #endlessvoid by GLo|o|/ovd (test)
* You have been kicked from #endlessvoid by pylink-devel.overdrive.pw ((ChanServ/ovd) (GLo|o| (GLolol)) test)
* You have been kicked from #endlessvoid by pylink-devel.overdrive.pw ((some.server.name/ovd) No reason given)
2015-07-19 23:49:50 -07:00
James Lu
fd736b383f
relay: add user mode handling based on a whitelist of modes
...
Closes #64 .
2015-07-19 22:43:26 -07:00
James Lu
4078cef3e4
relay: base mode relaying off a whitelist ( closes #54 )
...
Modes that aren't standard/safe (e.g. ojoin +Y, permchan +P, various anti-flood modes) are simply ignored.
2015-07-19 16:53:51 -07:00
James Lu
0540e10d50
relay: don't add bans that don't match nick!user@host
...
Closes #55 .
2015-07-19 16:53:51 -07:00
James Lu
57e9bf601e
Log command usage, 'exec' usage, successful logins, and access denied to commands in admin.py
...
Closes #66 .
2015-07-19 15:01:49 -07:00
James Lu
c00da49477
relay: add 'save' command, make rescheduling optional in exportDB()
2015-07-19 15:01:49 -07:00
James Lu
688675d484
relay: don't relay messages sent to the PyLink client
2015-07-19 11:27:57 -07:00
James Lu
024ac165a8
relay: Only allow messaging users in common channels / channels that you're in
...
The old behavior, which iterated over the pseudoclients representing the sender, dropped messages to clients without a common channel without any warning. Now, the sender will get a lovely notice from the PyLink client.
Trying to send to a '-n' channel without being in it:
-PyLink-devel- Error: You must be in '#channel' in order to send messages.
Trying to message a user without sharing a common channel:
-PyLink-devel- Error: You must be in a common channel with 'GLolol/testnet' in order to send messages.
Closes #62 .
2015-07-18 12:24:12 -07:00
James Lu
d30890c5cd
relay: fix "RuntimeError: dictionary changed size during iteration" in handle_part
2015-07-18 12:21:46 -07:00
James Lu
ccf759679b
relay: fix the wrong modes being propagated to the wrong channels
...
tl;dr, this was two bugs in one! Closes #53 .
2015-07-18 12:06:58 -07:00
James Lu
4553eda6ec
plugins/admin & relay: Add help for commands
2015-07-17 22:35:34 -07:00
James Lu
50665ec601
commands: remove 'debug', it's useless now that 'exec', 'showchan', and 'showuser' exist
2015-07-17 22:21:57 -07:00
James Lu
6508cb3c38
commands: add a 'help' command ( closes #8 )
...
Fetch the docstring of the command function if it exists, and format appropriately.
2015-07-17 22:21:16 -07:00
James Lu
bbcd70b175
relay: add 'linked' command ( closes #65 )
2015-07-17 22:00:25 -07:00
James Lu
49943a7992
relay: only join PyLink to channels & set topics if there's actually a relay on the network
2015-07-17 21:51:30 -07:00
James Lu
3f6f78be9a
relay + Irc: keep track of network disconnects
...
This introduces a new PYLINK_DISCONNECT meta-hook that is called when a network disconnects. Also, reset the state variables (i.e. servers, users, etc.) on disconnect! (this was missed before)
Closes #60 .
2015-07-17 16:57:08 -07:00
James Lu
bc9863d9e0
Make reconnecting a bit less... broken
2015-07-17 16:20:41 -07:00
James Lu
df595c65a1
fix SQUIT not respecting autoconnect delay
2015-07-17 16:01:51 -07:00
James Lu
f41e1a2eb5
Fixes for connection handling?
...
XXX: using SQUIT on the PyLink server doesn't respect autoconnect delays; why?
2015-07-17 15:08:24 -07:00
James Lu
836d0e9701
Irc: wrap (re)connecting in a while loop instead of calling it recursively
...
Also, remove unnecessary comments / ENDBURST hook from relay.
Ping handling seems to work fine now! Closes #57 . Closes #42 .
2015-07-17 14:37:07 -07:00
James Lu
9bef93c341
More stuff for PINGing uplink and autoreconnect ( #42 #59 #57 )
...
Doesn't quite work yet; still blocks everything on disconnect for some reason...
2015-07-17 13:41:14 -07:00
James Lu
2a586a6dba
relay: don't send empty MODE commands if there are no supported modes left after filtering
2015-07-16 16:27:17 -07:00
James Lu
cf32461d8e
relay: Only spawn clients if they share a channel, and quit them when they leave all shared channels
...
Closes #50 .
2015-07-16 12:25:42 -07:00
James Lu
40fd9e37a0
relay: don't spawn tagged clones for the internal PyLink client
2015-07-16 12:25:33 -07:00
James Lu
35f1c88a4e
relay: add hooks for CHGHOST / CHGIDENT / CHGNAME
...
Closes #49 .
2015-07-16 11:53:40 -07:00
James Lu
2f38b2b38d
relay: handle squit, quitting the relevant relay pseudoclients with a fake netsplit message
...
This is hardcoded to *.net *.split, but it may change to show the split servers in the future...
2015-07-15 19:09:10 -07:00
James Lu
cd244ee89b
relay: block until irc.maxnicklen is set, and remove check for "nick already in use" for internal clients
...
Closes #48 . This fixes the edge case where, if a person with a long, cut-off nick changes to another long nick, and the resulting normalized nick is the same,
normalizeNick will start incrementing the separator anyway. The correct behavior is to NOT send any nick changes if the old (normalized) nick and the new nick
match.
2015-07-15 13:53:14 -07:00
James Lu
bbe71e22ab
relay: fixes for NICK and TOPIC propogation
2015-07-15 11:48:26 -07:00
James Lu
e3e643de54
relay: don't try to spawn clients on disconnected networks (those raise errors)
2015-07-15 11:48:03 -07:00
James Lu
4c77ad93d7
relay: fix over-reaching behavior of delink #chan <remotenet> when you're the host
2015-07-15 11:47:06 -07:00
James Lu
0918b2f958
relay: missing line in initializeChannel
2015-07-14 23:29:03 -07:00
James Lu
3a9df57c39
relay: remove unused relay() function; what was that about?
2015-07-14 23:26:56 -07:00
James Lu
5999eedd98
relay: block kills, respawning their targets transparently
...
Closes #47 .
2015-07-14 23:26:52 -07:00
James Lu
13e4cadf2b
relay: add TOPIC support (experimental)
...
Closes #46 .
2015-07-14 23:26:39 -07:00
James Lu
46e1538bd2
relay: fix #45 - cases when MODE/KICK is sent by a server, not a client
2015-07-14 22:37:50 -07:00
James Lu
7de8f1509d
relay: factorize getLocalUser, introduce MODE (experimental) and PRIVMSG handler
2015-07-14 19:39:49 -07:00
James Lu
f74e704733
relay: whoops, check for claim properly
2015-07-14 18:27:26 -07:00
James Lu
28f1d4ba19
relay: add a working KICK handler
...
This should block kicks from non-opped remote users, and handle kicks across the relay properly by mapping our pseudoclients to the real targets.
2015-07-14 18:23:19 -07:00
James Lu
876cf34825
relay: Remove spawning a sub-server for each relay network
...
It introduced bugs, and made the relay code more complicated than it has to be :(
2015-07-14 17:42:17 -07:00
James Lu
a1299676f1
relay: factorize fetching of remote users/SIDs, spawning them if they don't exist
2015-07-14 12:04:05 -07:00
James Lu
59295f921b
relay: part users on DELINK/DESTROY
2015-07-13 23:29:20 -07:00
James Lu
310a9201e2
relay: fix bugs with removing nonexistant channels in DELINK, and linking a channel multiple times in LINK
2015-07-13 22:54:51 -07:00
James Lu
1cbcec1001
relay: sync modes on initializeChannel as well
2015-07-13 22:42:50 -07:00
James Lu
c5298e3931
relay: fix joining users on initializeChannel
2015-07-13 21:46:05 -07:00
James Lu
235f169e54
relay: add quit, part, and nick handlers
2015-07-13 19:53:57 -07:00
James Lu
9bc8a35c25
relay: fix cases where a remote linked channel has different name
2015-07-13 19:46:24 -07:00
James Lu
a5e2beb566
relay: propogate prefix modes in relayJoins, if the remote net supports them
2015-07-13 18:23:58 -07:00
James Lu
d8cb3f1973
relay: spawn users on the right pseudoservers, and use SJOIN to introduce them if possible
2015-07-13 16:09:22 -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
James Lu
b3528a2b04
relay: better channel initialization
2015-07-13 00:01:04 -07:00
James Lu
b3206822d2
relay: fix users being cloned on every JOIN
2015-07-12 23:31:26 -07:00
James Lu
6b9ec694b7
relay: basic JOIN handling
2015-07-12 23:28:54 -07:00
James Lu
3c2d0dbe3f
relay: (de)initialize channels using shared initialize/removechannel()
2015-07-12 19:03:18 -07:00
James Lu
0dc0770d6d
relay: add LINK and DELINK commands; many fixes to checkers (WIP)
2015-07-12 17:59:09 -07:00
James Lu
6870e041bc
relay: catch nicks that start with digits and add tests
2015-07-12 16:59:49 -07:00
James Lu
b538037e22
relay: add normalizeNick stub
2015-07-12 14:02:17 -07:00
James Lu
450584b963
relay: hack in utils.schedulers so that exportDB only gets queued once globally
...
Previously, exportDB would be queued once by every IRC object, which was the wrong behavior!
2015-07-12 13:09:35 -07:00
James Lu
e073f21417
relay: spawn servers, raise exportDB interval to 60; use main(irc)
2015-07-11 20:21:10 -07:00
James Lu
8d4a06b60e
Initial PyLink-Relay stub, with CREATE and DESTROY commands using a pickle database.
...
ref #37 .
2015-07-10 20:26:46 -07:00
James Lu
3156d83ec3
plugins/admin: rename quitclient -> quit
2015-07-10 16:43:16 -07:00
James Lu
070bba77cb
admin.py: check to see if queried channels exist; sort output fields
2015-07-09 17:05:23 -07:00
James Lu
e7922be9fb
plugins/commands.py: warn on failed login attempts
2015-07-08 23:21:01 -07:00
James Lu
27bb6af7f6
plugins/admin.py: add 'mode' and 'showchan' commands
2015-07-08 23:01:09 -07:00
James Lu
edfcacfdd1
plugins/admin.py: remove -client suffixes from commands, and fix argument checking
2015-07-08 22:50:19 -07:00
James Lu
211decd2aa
everything: Improve logging
2015-07-05 13:44:48 -07:00
James Lu
f06bcc7928
Merge commit 'bd755e137ffa034007a77d75fbd00d21e759163e' into wip/logger-module
...
Conflicts:
proto.py
2015-07-05 13:22:17 -07:00
James Lu
d23d34e316
Refactor hooks to send parsed arguments instead of raw args
...
ref #18 .
- Command handlers that support hooks will now return parsed args, which are then sent to the hooks
- Hook commands are now stored in uppercase letters, consistent with the IRC spec
2015-07-04 19:00:29 -07:00
James Lu
6370ad492f
Add basic command hooks (ref #18 )
2015-06-23 19:08:43 -07:00
James Lu
0db5c4c209
plugins/admin.py: add 'showuser' command
2015-06-19 13:00:23 -07:00
James Lu
d8b562865d
plugins/admin.py: this is an exec command, not eval
2015-06-19 10:44:25 -07:00
James Lu
f40cb7954a
Allow dynamic protocol loading again, and make proto an attribute of Irc()
...
This should remove the need for plugins, etc. to import proto directly,
which wouldn't work because of dynamic naming.
2015-06-16 20:05:41 -07:00
James Lu
4d763288e5
rename utils._nicktoUid to utils.nickToUid
...
Consistency in function capitalization is a good thing!!
2015-06-07 19:36:21 -07:00
James Lu
43a46d3d99
Many fixes
...
- Move _nicktoUid to utils.py
- Make _sendFromUser arguments more consistent (irc, sendfrom, message) instead of (irc, message, sendfrom=None)
- Add admin only kickclient, partclient, and nickclient commands
- proto.joinClient: take UIDs instead of an IrcUser object, in order to be more consistent
Closes #4 , Closes #12 .
2015-06-07 19:31:56 -07:00
James Lu
86c7fd0db1
WIP admin commands
2015-06-07 13:40:18 -07:00
James Lu
6680942424
More code and broken shenanigans
...
- plugins/commands.py: add admin-only eval command
- add IrcChannel class and basic channel (FJOIN/QUIT) handling
- Move SQUIT/QUIT handling code to a shared removeClient function
- Unfortunately, this causes a regression where the users and channels indexes aren't purged on a netsplit :(
2015-06-06 23:06:33 -07:00
James Lu
0ed1e13115
Remove plugins/hello.py
...
This was solely a testing module for the plugin/commands system, and serves no purpose anymore. commands.py provides basic commands that are both simple and actually useful.
2015-06-03 16:09:53 -07:00
James Lu
d9db7e1b9e
It's almost June! Updates:
...
- Move config handling into separate module
- Implement identify and status commands, currently only supporting the admin account defined in the config. Closes #1 .
- Move proto.add_cmd to utils.py, rename _msg() to msg()
- Allow sending the command name as an optional argument in add_cmd
- Add catch-all exception handling in plugins to prevent them from crashing the program!
2015-05-31 12:20:09 -07:00
James Lu
0fcf5ead04
utils.py: Make _msg a shared function ( Closes #3 )
2015-05-30 23:00:39 -07:00
James Lu
17fc05cc9a
WIP: use a proper logging module
2015-05-30 22:35:00 -07:00
James Lu
d158143cea
This month's code dump... featuring:
...
- Server enumeration, with handlers for BURST (introduction to uplink), SERVER (introduction of uplink's other leaf servers), NICK, and SQUIT (closes #2 )
- Store UIDs instead of nicks in the user database - this makes the protocol a lot easier to work with.
2015-05-30 22:15:19 -07:00
James Lu
f2fdaf55a1
commands: add a command to print debug info to console
2015-04-24 23:04:33 -07:00
James Lu
6b79793336
cleanup, add commands.py plugin (incomplete)
2015-04-24 23:00:01 -07:00
James Lu
9b4fb50f25
Today's code dump, featuring:
...
- PLUGIN SUPPORT and COMMAND HANDLING, wow!!!!!!!
- Restructuring of files so that there's only one protocol module (anything else is too much to maintain for now)
- Split protocol things into utils.py
- Bugfixes: don't go into an endless loop of text spamming when the remote host closes the connection!
2015-04-24 22:37:07 -07:00