File: accounts.html

package info (click to toggle)
eggdrop 1.10.1-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 9,596 kB
  • sloc: ansic: 65,863; javascript: 8,908; sh: 5,337; tcl: 3,801; makefile: 1,771; python: 121
file content (219 lines) | stat: -rw-r--r-- 19,418 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
<!DOCTYPE html>

<html lang="en" data-content_root="../">
  <head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="viewport" content="width=device-width, initial-scale=1" />

    <title>Account tracking in Eggdrop &#8212; Eggdrop 1.10.1rc2 documentation</title>
    <link rel="stylesheet" type="text/css" href="../_static/pygments.css?v=03e43079" />
    <link rel="stylesheet" type="text/css" href="../_static/eggdrop.css?v=ab48a1b6" />
    <script src="../_static/documentation_options.js?v=290de6c6"></script>
    <script src="../_static/doctools.js?v=9bcbadda"></script>
    <script src="../_static/sphinx_highlight.js?v=dc90522c"></script>
    <link rel="search" title="Search" href="../search.html" />
    <link rel="next" title="Encryption/Hashing" href="pbkdf2info.html" />
    <link rel="prev" title="IRCv3 support" href="ircv3.html" /> 
  </head><body>
    <div class="header-wrapper" role="banner">
      <div class="header">
        <div class="headertitle"><a
          href="../index.html">Eggdrop 1.10.1rc2 documentation</a></div>
        <div class="rel" role="navigation" aria-label="related navigation">
          <a href="ircv3.html" title="IRCv3 support"
             accesskey="P">previous</a> |
          <a href="pbkdf2info.html" title="Encryption/Hashing"
             accesskey="N">next</a>
        </div>
       </div>
    </div>

    <div class="content-wrapper">
      <div class="content">
        <div class="sidebar">
          
          <h3>Table of Contents</h3>
          <p class="caption" role="heading"><span class="caption-text">Installing Eggdrop</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../install/readme.html">README</a></li>
<li class="toctree-l1"><a class="reference internal" href="../install/install.html">Installing Eggdrop</a></li>
<li class="toctree-l1"><a class="reference internal" href="../install/upgrading.html">Upgrading Eggdrop</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">Using Eggdrop</span></p>
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="features.html">Eggdrop Features</a></li>
<li class="toctree-l1"><a class="reference internal" href="core.html">Eggdrop Core Settings</a></li>
<li class="toctree-l1"><a class="reference internal" href="partyline.html">The Party Line</a></li>
<li class="toctree-l1"><a class="reference internal" href="autoscripts.html">Eggdrop Autoscripts</a></li>
<li class="toctree-l1"><a class="reference internal" href="users.html">Users and Flags</a></li>
<li class="toctree-l1"><a class="reference internal" href="bans.html">Bans, Invites, and Exempts</a></li>
<li class="toctree-l1"><a class="reference internal" href="botnet.html">Botnet Sharing and Linking</a></li>
<li class="toctree-l1"><a class="reference internal" href="ipv6.html">IPv6 support</a></li>
<li class="toctree-l1"><a class="reference internal" href="tls.html">TLS support</a></li>
<li class="toctree-l1"><a class="reference internal" href="ircv3.html">IRCv3 support</a></li>
<li class="toctree-l1 current"><a class="current reference internal" href="#">Account tracking in Eggdrop</a><ul>
<li class="toctree-l2"><a class="reference internal" href="#required-server-capabilities">Required Server Capabilities</a></li>
<li class="toctree-l2"><a class="reference internal" href="#enabling-eggdrop-account-tracking">Enabling Eggdrop Account Tracking</a></li>
<li class="toctree-l2"><a class="reference internal" href="#checking-account-tracking-status">Checking Account-tracking Status</a></li>
<li class="toctree-l2"><a class="reference internal" href="#determining-if-a-server-supports-account-capabilities">Determining if a Server Supports Account Capabilities</a></li>
<li class="toctree-l2"><a class="reference internal" href="#best-effort-account-tracking">Best-Effort Account Tracking</a></li>
<li class="toctree-l2"><a class="reference internal" href="#using-accounts-with-tcl-scripts">Using Accounts with Tcl Scripts</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="pbkdf2info.html">Encryption/Hashing</a></li>
<li class="toctree-l1"><a class="reference internal" href="python.html">Using the Python Module</a></li>
<li class="toctree-l1"><a class="reference internal" href="twitchinfo.html">Twitch</a></li>
<li class="toctree-l1"><a class="reference internal" href="tricks.html">Advanced Tips</a></li>
<li class="toctree-l1"><a class="reference internal" href="text-sub.html">Textfile Substitutions</a></li>
<li class="toctree-l1"><a class="reference internal" href="tcl-commands.html">Eggdrop Tcl Commands</a></li>
<li class="toctree-l1"><a class="reference internal" href="twitch-tcl-commands.html">Eggdrop Twitch Tcl Commands</a></li>
<li class="toctree-l1"><a class="reference internal" href="patch.html">Patching Eggdrop</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">Tutorials</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../tutorials/setup.html">Setting Up Eggdrop</a></li>
<li class="toctree-l1"><a class="reference internal" href="../tutorials/firststeps.html">Common First Steps</a></li>
<li class="toctree-l1"><a class="reference internal" href="../tutorials/tlssetup.html">Enabling TLS Security on Eggdrop</a></li>
<li class="toctree-l1"><a class="reference internal" href="../tutorials/userfilesharing.html">Sharing Userfiles</a></li>
<li class="toctree-l1"><a class="reference internal" href="../tutorials/firstscript.html">Writing an Eggdrop Tcl Script</a></li>
<li class="toctree-l1"><a class="reference internal" href="../tutorials/module.html">Writing a Basic Eggdrop Module</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">Eggdrop Modules</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../modules/index.html">Eggdrop Module Information</a></li>
<li class="toctree-l1"><a class="reference internal" href="../modules/included.html">Modules included with Eggdrop</a></li>
<li class="toctree-l1"><a class="reference internal" href="../modules/writing.html">How to Write an Eggdrop Module</a></li>
<li class="toctree-l1"><a class="reference internal" href="../modules/internals.html">Eggdrop Bind Internals</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">About Eggdrop</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../about/about.html">About Eggdrop</a></li>
<li class="toctree-l1"><a class="reference internal" href="../about/legal.html">Boring legal stuff</a></li>
</ul>

          <div role="search">
            <h3 style="margin-top: 1.5em;">Search</h3>
            <form class="search" action="../search.html" method="get">
                <input type="text" name="q" />
                <input type="submit" value="Go" />
            </form>
          </div>

        </div>
        <div class="document">
            
      <div class="documentwrapper">
        <div class="bodywrapper">
          <div class="body" role="main">
            
  <section id="account-tracking-in-eggdrop">
<h1>Account tracking in Eggdrop<a class="headerlink" href="#account-tracking-in-eggdrop" title="Link to this heading">¶</a></h1>
<p>In Eggdrop 1.9.3, Eggdrop added the ability to associate nicknames with the service accounts they are logged into. It is IMPORTANT to note that Eggdrop’s ability to do this is dependent on an IRC server’s implementation of three features- the IRCv3 extended-join capability, the IRCv3 account-notify capability, and WHOX support. All three of these features must be supported by the server and, in the case of extended-join and account-notify, requested by Eggdrop in order for Eggdrop to maintain “perfect” association between nicknames and account statuses.</p>
<section id="required-server-capabilities">
<h2>Required Server Capabilities<a class="headerlink" href="#required-server-capabilities" title="Link to this heading">¶</a></h2>
<p>You’re going to see this repeated a lot- the IRC server must support three features in order for Eggdrop to accurately associate accounts with nicknames. These three features allow Eggdrop to always know the current association between an account and a nickname by getting account statuses of users already on a channel when it joins, new users joining a channel, and users who authenticate while on a channel.</p>
<section id="extended-join">
<h3>extended-join<a class="headerlink" href="#extended-join" title="Link to this heading">¶</a></h3>
<p><a class="reference external" href="https://ircv3.net/specs/extensions/extended-join">extended-join</a> is an IRCv3-defined capability that adds the account name of a user to the JOIN message sent by the IRC server, alerting clients that a new member has joined a channel. Enabling this capability allows Eggdrop to immediately determine the account name associated with a user joining a channel</p>
</section>
<section id="account-notify">
<h3>account-notify<a class="headerlink" href="#account-notify" title="Link to this heading">¶</a></h3>
<p><a class="reference external" href="https://ircv3.net/specs/extensions/account-notify">account-notify</a> is an IRCv3-defined capability that sends a message to a channel when a member of the channel either authenticates or deauthenticates from their account. Enabling this capability allows Eggdrop to immediately associate an account to a channel member when they authenticate or deauthenticate.</p>
</section>
<section id="whox">
<h3>WHOX<a class="headerlink" href="#whox" title="Link to this heading">¶</a></h3>
<p>‘WHOX &lt;<a class="reference external" href="https://ircv3.net/specs/extensions/whox">https://ircv3.net/specs/extensions/whox</a>&gt;`_ is a server feature that allows a client to request custom fields to be returned in a WHO response. If a server supports this capability, Eggdrop sends a WHOX query to the server when it joins a channel, allowing it to immediately determine accounts associated with channel members when Eggdrop joins a channel.</p>
</section>
</section>
<section id="enabling-eggdrop-account-tracking">
<h2>Enabling Eggdrop Account Tracking<a class="headerlink" href="#enabling-eggdrop-account-tracking" title="Link to this heading">¶</a></h2>
<p>By default, the Eggdrop config file will attempt to enable all the capabilities required for account tracking. There are two settings to pay attention to</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="c1"># To request the account-notify feature via CAP, set this to 1</span>
<span class="nb">set</span> <span class="n">account</span><span class="o">-</span><span class="n">notify</span> <span class="mi">1</span>

<span class="c1"># To request the extended-join feature via CAP, set this to 1</span>
<span class="nb">set</span> <span class="n">extended</span><span class="o">-</span><span class="n">join</span> <span class="mi">1</span>
</pre></div>
</div>
<p>The ability of a server to support WHOX queries is determined via a server’s ISUPPORT (005) reply. If a server supports WHOX queries, Eggdrop will automatically enable this feature.</p>
</section>
<section id="checking-account-tracking-status">
<h2>Checking Account-tracking Status<a class="headerlink" href="#checking-account-tracking-status" title="Link to this heading">¶</a></h2>
<p>While Eggdrop is running, join the partyline and type <cite>.status</cite>. If account-tracking is enabled (both the server supports and Eggdrop has requested), you’ll see this line</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">Loaded</span> <span class="n">module</span> <span class="n">information</span><span class="p">:</span>
  <span class="c1">#eggdroptest        : (not on channel)</span>
  <span class="n">Channels</span><span class="p">:</span> <span class="c1">#eggdroptest (trying)</span>
  <span class="n">Account</span> <span class="n">tracking</span><span class="p">:</span> <span class="n">Enabled</span>           <span class="o">&lt;---</span> <span class="n">This</span> <span class="n">line</span>
  <span class="n">Online</span> <span class="k">as</span><span class="p">:</span> <span class="n">BeerBot</span> <span class="p">(</span><span class="n">BeerBot</span><span class="p">)</span>
</pre></div>
</div>
<p>Otherwise, the prompt will tell you which required capability is missing/not enabled</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">Loaded</span> <span class="n">module</span> <span class="n">information</span><span class="p">:</span>
  <span class="c1">#eggdroptest        :   2 members, enforcing &quot;+tn&quot; (greet)</span>
  <span class="n">Channels</span><span class="p">:</span> <span class="c1">#eggdroptest (need ops)</span>
  <span class="n">Account</span> <span class="n">tracking</span><span class="p">:</span> <span class="n">Best</span><span class="o">-</span><span class="n">effort</span> <span class="p">(</span><span class="n">Missing</span> <span class="n">capabilities</span><span class="p">:</span> <span class="n">extended</span><span class="o">-</span><span class="n">join</span><span class="p">,</span> <span class="n">see</span> <span class="o">.</span><span class="n">status</span> <span class="nb">all</span> <span class="k">for</span> <span class="n">details</span><span class="p">)</span>      <span class="o">&lt;----</span> <span class="n">This</span> <span class="n">line</span>
  <span class="n">Online</span> <span class="k">as</span><span class="p">:</span> <span class="n">Eggdrop</span> <span class="p">(</span><span class="n">Eggdrop</span><span class="p">)</span>
</pre></div>
</div>
</section>
<section id="determining-if-a-server-supports-account-capabilities">
<h2>Determining if a Server Supports Account Capabilities<a class="headerlink" href="#determining-if-a-server-supports-account-capabilities" title="Link to this heading">¶</a></h2>
<p>A server announces the capabilities it supports via a CAP request. If you have Tcl enabled on the partyline (or via a raw message from a client), you can send <cite>.tcl cap ls</cite> and see if the extended-join and account-notify capabilities are supported by the server. If they are not listed, the server does not support it.</p>
<p>A server announces if it supports WHOX via its ISUPPORT (005) announcement. If you have Tcl enabled on the partyline, you can send <cite>.tcl issupport isset WHOX</cite> and if it returns ‘1’, WHOX is supported by the server.</p>
</section>
<section id="best-effort-account-tracking">
<h2>Best-Effort Account Tracking<a class="headerlink" href="#best-effort-account-tracking" title="Link to this heading">¶</a></h2>
<p>If a server only supports some, but not all, of the required capabilities, Eggdrop will switch to ‘best effort’ account tracking. This means Eggdrop will update account statuses whenever it sees account information, but in this mode Eggdrop cannot guarantee that all account associations are up to date.</p>
<p>If a server does not support extended-join, Eggdrop will not be able to determine the account associated with a user when they join. Eggdrop can update this information by sending a WHOX to the server.</p>
<p>If a server does not support account-notify, Eggdrop will not be able to determine the account associated with a user if they authenticate/deauthenticate from their account after joining a channel. Eggdrop can update this information by sending a WHOX to the server.</p>
<p>If a server does not support WHOX, Eggdrop will not be able to determine the accounts associated with users already on a channel before Eggdrop joined. There is no reliable way to update this information.</p>
<p>One workaround to significantly increase the accuracy of account tracking for scripts in a ‘best effort’ scenario would be to issue a WHOX query (assuming the server supports it), wait for the reply from the server, and then query for the account information.</p>
<section id="account-tag">
<h3>account-tag<a class="headerlink" href="#account-tag" title="Link to this heading">¶</a></h3>
<p>One supplementary capability that can assist a best-effort account tracking scenario is the IRCv3-defined <a class="reference external" href="https://ircv3.net/specs/extensions/account-tag">account-tag capability</a>. The account-tag capability attaches a tag with the account name associated with the user sending a command. Enabling this capability allows Eggdrop to update its account tracking every time a user talks in channel, sets a mode, sends a kick, etc. While still not able to offer the same level of accuracy as enabling the “main three” account tracking features, it can increase the overall accuracy of the account list. Additionally, binds that react to user activity (pub, kick, mode, etc) containing account-tag will update the internal account list prior to executing the associated callback, so looking up the account name in the callback can be considered accurate.</p>
</section>
</section>
<section id="using-accounts-with-tcl-scripts">
<h2>Using Accounts with Tcl Scripts<a class="headerlink" href="#using-accounts-with-tcl-scripts" title="Link to this heading">¶</a></h2>
<p>The Eggdrop Tcl ACCOUNT bind is triggered whenever an existing account record stored by Eggdrop is modified, such as a user de/authenticating to their account while in a channel, or information such as an account-tag being seen that updates an existing user. However, the ACCOUNT bind will NOT be triggered for the creation of a new user record, such as a user joining a channel. The bind is triggered for every channel the user is seen on- this means if a user is present with Eggdrop on four channels, the bind will be executed four times, each time with a different channel variable being passed to the associated Tcl procedure. Additionally, in a best-effort account tracking situation, Eggdrop will update the account associated with a user on all channels, not just the channel the event is seen on (and thus resulting in a bind trigger for each channel the user is on).</p>
<p>In order to trigger Tcl script events to cover all instances where a user logs in, you need to pair an ACCOUNT bind with a JOIN bind. This will allow you to execute account-based events when a user joins as well as if they authenticate after joining.</p>
</section>
</section>


            <div class="clearer"></div>
          </div>
        </div>
      </div>
        </div>
        <div class="clearer"></div>
      </div>
    </div>

    <div class="footer-wrapper">
      <div class="footer">
        <div class="left">
          <div role="navigation" aria-label="related navigaton">
            <a href="ircv3.html" title="IRCv3 support"
              >previous</a> |
            <a href="pbkdf2info.html" title="Encryption/Hashing"
              >next</a>
          </div>
          <div role="note" aria-label="source link">
          </div>
        </div>

        <div class="right">
          
    <div class="footer" role="contentinfo">
    &#169; Copyright 2025, Eggheads.
      Last updated on Aug 15, 2025.
      Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 8.2.3.
    </div>
        </div>
        <div class="clearer"></div>
      </div>
    </div>

  </body>
</html>