eggheads / eggdrop

The Eggdrop IRC Bot
GNU General Public License v2.0
510 stars 84 forks source link

Full account tacking #1585

Closed vanosg closed 6 months ago

vanosg commented 6 months ago

a PR that tracks adds get_user_from_channel, that calls both get_user_by_account() and get_user_by_host(). This will allow Eggdrop to track a user by their account name (first), and then check a hostname. The assumption here is that account names are more precise and less prone to collisions/spoofing than a hostmask. All the user protections and checks associated with handles can now be used based on account names instead of hosts.

vanosg commented 6 months ago

Test setup- user Geo has a matching host and +o flag but no account, jack3 has a matching account and +o flag but no host, thommey has no matching info.

Testing Tcl chanlist, detects Geo by host and jack3 by account:

.tcl chanlist #eggheads +o
Tcl: Geo jack3

Testing Tcl handonchan, detects Geo and jack3 but not thommey

.tcl handonchan Geo
Tcl: 1
.tcl handonchan jack3
Tcl: 1
.tcl handonchan thommey
Tcl: 0

Testing Tcl hand2nicks:

.tcl hand2nicks geo
Tcl: Geo
.tcl hand2nicks jack3 
Tcl: jack3
.tcl hand2nicks thommey
Tcl: 

Testing Tcl nick2hand:

.tcl nick2hand geo
Tcl: Geo
.tcl nick2hand Jack3
Tcl: jack3
.tcl nick2hand thommey
Tcl: *
vanosg commented 6 months ago

Testing with and without extended-join enabled; with extended-join Eggdrop properly op'd a user that only had a matching account (no hostmask) added.

Topic bind worked

Pub bind worked

Kick bind worked