Eggdrop 1.10.2 配置参数详解

逐域讲清 Eggdrop 1.10.2 主配置文件 eggdrop.conf 的参数体系:30 个配置域逐项释义、默认值、.rehash 热加载与 .set 运行时调整实测,附生产最小模板。

EggdropEggdropIRC即时通信2026/10/25

Eggdrop 1.10.2 配置参数详解

目标:逐域讲清 Eggdrop 1.10.2 主配置文件(eggdrop.conf,约 1700 行、30 个配置域)的参数体系,给出每一项的含义、默认值与实测生效方式,并附一份可直接投产的最小配置模板。全文配置原文与热加载回显均在 Ubuntu 22.04.5 LTS + Eggdrop 1.10.2 源码编译实例上实测。

一、环境信息

  • 操作系统:Ubuntu 22.04.5 LTS(Jammy),x86_64
  • 软件版本:Eggdrop 1.10.2(2026-09-06 稳定版,源码编译安装于 /opt/eggdrop)
  • 配置文件:Tcl 格式的单一文本文件(示例 eggdrop.conf 67KB,工作配置 testbot.conf)
  • 验证手段:partyline .rehash 热加载、.set <变量> 运行时查询、grep 定位原文

二、前置条件

  • 已按《Ubuntu 22.04 安装 Eggdrop 1.10.2 指南》完成安装并成功首启(拿到 owner 账号)。
  • 能通过 telnet 登录 partyline(.rehash、.set 等命令在其中执行)。
  • 具备基础 Tcl 语法常识:配置文件本质是 Tcl 脚本,set 变量 值 赋值,# 注释,# 开头的配置项即「未启用、用编译内置默认值」。

三、配置体系总览

Eggdrop 的全部行为由单个配置文件驱动。1.10.2 官方示例 eggdrop.conf 按 #####/#### 标题划分为 30 个配置域(实测 grep -n '####' eggdrop.conf 提取):

#配置域作用本篇章节
1BASIC SETTINGSident 用户名、管理员、时区5.1
2LOG FILES日志分级、logfile 定义、轮转5.2
3CONSOLEpartyline 默认控制台模式5.3
4FILES AND DIRECTORIES用户库/pid/帮助/文本路径5.4
5BOTNET/DCC/TELNET监听端口、botnet、防洪水5.5
6SSL SETTINGS证书、协议、验证策略5.6
7MORE ADVANCED SETTINGSowner、must-be-owner、die 防呆5.7
8PBKDF2 / BLOWFISH / PYTHON口令哈希与脚本扩展模块5.8
9CHANNELS MODULE频道默认值与 channel add5.9
10SERVER MODULE网络类型、昵称、server add5.10
11CAP FeaturesIRCv3 能力与 SASL 认证5.11
12CTCP / IRC / TWITCHCTCP 应答、IRC 行为、Twitch5.12
13TRANSFER / SHARE / COMPRESS / FILESYSTEMDCC 传输、用户库共享、文件服务5.13
14NOTES / CONSOLE / WOOBIE / SEEN / ASSOC / UPTIME / IDENT便签、控制台保存、杂项模块5.14
15WEBUI / AUTOSCRIPTS / TCL / PYTHON SCRIPTSWeb 界面与脚本加载5.15

两个「防呆」拦截行(不改配置直接启动会被它们拦下退出):

grep -n '^die' eggdrop.conf
592:die "Please make sure you edit your config file completely."
1564:die "You didn't edit your config file completely like you were told, did you?"

⚠️ 注意:完成配置后必须删除这两行 die,否则机器人拒绝启动。这是官方刻意设计,强制你通读配置。

四、参数修改与生效方式

Eggdrop 参数有三个层级,生效方式不同:

方式操作生效范围
改配置文件 + .rehash编辑 conf 后在 partyline 执行 .rehash绝大多数参数热生效,无需重启
.set <变量> <值>partyline 直接改运行时变量立即生效,但不写回配置文件,重启后丢失
重启进程部分结构性参数(如 max-logs 调小、listen 端口在某些场景)需完整重启

.rehash 热加载实测回显:

.rehash
[05:14:24] #admin# rehash
Rehashing.
[05:14:24] Writing user file...
[05:14:24] Writing channel file...
[05:14:24] Rehashing ...
[05:14:24] Listening for telnet connections on 0.0.0.0 port 3333 (all).
[05:14:24] Loading dccwhois.tcl...
[05:14:24] Loaded dccwhois.tcl
[05:14:24] Userfile loaded, unpacking...

运行时查询参数当前值(.set 只带变量名即查询):

.set must-be-owner
[05:14:33] #admin# set must-be-owner
Currently: 1

五、核心参数分类详解

5.1 BASIC SETTINGS(基础身份)

参数默认值说明
set username"lamest"机器人 IRC ident 用户名;若系统跑了 identd 则以 identd 为准
set admin"Lamer <email: lamer@lamest.lame.org>"管理员联系信息,展示在 .status、/msg help 等处
set network"I.didn't.edit.my.config.file.net"所属 IRC 网络名,供 botnet 内展示
set timezone"America/New_York"时区,影响日志时间戳与脚本;国内建议 Asia/Shanghai
set env(TZ)注释状态取消注释后让时区在脚本之外也处处生效

5.2 LOG FILES(日志体系)

Eggdrop 按「事件类别字母」分流日志,每个 logfile 绑定一个频道(* 表示全部频道)。

事件类别字母(照抄官方注释):b botnet 链接与用户库共享、c 命令、d 调试、g/h 出站/入站共享流量、j 进出频道/断网、k 踢人/封禁/模式、l 已链接机器人消息、m 私信/notice/ctcp、o 杂项与错误(重要)、p 频道公开发言、r/v 入站/出站服务器原始流量、s 服务器连接事件、t/u 入站/出站 botnet 原始流量、w wallops、x 文件传输。另有 1-8 八个自定义级别供 Tcl 脚本用。

参数默认值说明
set max-logs20并发日志文件上限;调小需重启(rehash 不够),且不得低于 5
set max-logsize0单文件上限(KB),0 不限制;仅在 keep-all-logs 0 时生效
set raw-log0允许 r/v/t/u/g/h 原始流量日志。安全提示:可能泄露用户口令,仅 +n 用户可用
logfile mco * "logs/eggdrop.log"启用主日志:私信+命令+杂项,全频道
set log-time1日志带时间戳
set timestamp-format{[%H:%M:%S]}时间戳格式(strftime 语法,32 字符内)
set keep-all-logs01 则永久保留日志并按 logfile-suffix 滚动命名
set switch-logfiles-at300每日切日志时间(军用时间,300=凌晨 3 点)
set quiet-save01 不再记录 "Writing user file...";2 连备份也不记;3 再连切日志也不记

💡 说明:d/h/r/t/v 五类原始流量日志会快速撑爆磁盘配额,仅排障时临时开启。

5.3 CONSOLE(全局默认控制台)

参数默认值说明
set console"mkcoblxs"用户登录 partyline 后的默认控制台事件模式(字母含义同日志);个人可用 .console 命令自改

5.4 FILES AND DIRECTORIES(文件与路径)

参数默认值说明
set userfile"LamestBot.user"用户库存档文件名
set pidfile注释状态不设置时默认 pid.<botnet-nick>;systemd 托管建议显式指定
set help-path"help/"帮助文件目录
set text-path"text/"文本文件目录(MOTD、banner 等)
set motd"text/motd"DCC/telnet 登录后展示的欢迎信息
set telnet-banner"text/banner"telnet 连接建立时展示的横幅
set userfile-perm0600用户库/频道库/便签文件的八进制权限;默认 0600 最安全

5.5 BOTNET/DCC/TELNET(监听与 botnet)

这是安全敏感区,核心语法是 listen:

listen 3333 all          # 单端口同时服务用户与机器人
listen 3333 bots         # 分端口:仅机器人
listen 4444 users        #         仅用户
listen +5555 all         # 端口前加 + = SSL 监听
listen 1.2.3.4 3333 all  # 绑定指定本机 IP(替代 1.9 前的 listen-addr)
参数默认值说明
#listen 3333 all注释状态默认不监听!必须取消注释并改掉 3333 这个众人皆知的端口
set botnet-nick注释状态botnet 上用与 IRC 不同的昵称时设置
set remote-boots2是否允许 botnet 内其他机器人踢本机用户:0 全禁/1 仅共享机器人/2 任意
set share-unlinks1允许远程机器人让本机与共享机器人断链
set protect-telnet01 则拒绝主机名不匹配的 telnet 连接
set dcc-sanitycheck01 则忽略信息可疑的 DCC chat 请求
set ident-timeout5ident 查询超时秒数,0 完全禁用
set require-p1+o 用户是否还需 +p 标志才能 DCC 连接
set open-telnets01 则允许任何人 telnet 后输入 NEW 自助注册(类似 hello 命令)
set stealth-telnets01 则 telnet 横幅不暴露 eggdrop 身份
set use-telnet-banner01 则 telnet 时展示 telnet-banner 文件内容
set connect-timeout15DCC chat/telnet/relay 建立超时秒数
set dcc-flood-thr3partyline 每秒超过 N 行判为洪水并踢出
set telnet-flood16:60同一主机 60 秒内 16 次 telnet 尝试即判洪水(格式 次数:秒)
set paranoid-telnet-flood11 则 telnet-flood 对 +f 用户也生效
set resolve-timeout注释状态主机名解析超时秒数,慢网络可调大

⚠️ 同机多开机器人时,telnet 端口至少间隔 5,最好间隔 10(官方注释原文要求)。

5.6 SSL SETTINGS(编译时启用 TLS 后生效)

参数默认值说明
set ssl-privatekey注释状态SSL 私钥(PEM)。做 SSL hub/SSL 监听/NickServ 证书认证时必须设置
set ssl-certificate注释状态SSL 证书(PEM)。不设则无法充当 SSL 服务端
set ssl-verify-depth9证书链验证最大深度
set ssl-capath"/etc/ssl/"CA 证书目录;不设则证书验证不可用
set ssl-protocols注释状态允许协议列表,如 "TLSv1.2 TLSv1.3"
set ssl-ciphers注释状态加密套件列表(如 "DEFAULT ADH"),设置后覆盖 OpenSSL 默认
set ssl-dhparam注释状态DH 参数文件(DH 密钥交换时需要)
set ssl-cert-auth01 允许证书指纹自动登录;2 强制指纹登录(指纹用 .fprint/.chfinger 预录)
set ssl-verify-dcc/bots/clients0分别控制 DCC、botnet 链接、SSL 监听端口的证书验证,0 关闭

证书自签名生成一条命令(官方注释给出):make install 后在安装目录执行 make sslcert 即可同时得到 key 与 crt。

5.7 MORE ADVANCED SETTINGS(高级与 owner 声明)

参数默认值说明
set owner注释状态声明永久 owner 句柄列表,如 "MrLame, MrsLame"。强烈建议设置,否则 .tcl/.set 无人可用
set must-be-owner11:.tcl/.set/.python 仅永久 owner 可用;2:连 .dump 也仅限永久 owner。设为 0 等于把宿主机 shell 交出去,官方明确警告不要这么做
set notify-newusers"$owner"新用户注册时发便签通知谁
set default-flags"hp"hello 命令自助注册用户的默认标志
set whois-fields"url birthday".whois 额外展示的自定义字段
set ignore-time15临时 ignore 的分钟数
set hourly-updates00每小时的第 N 分钟执行「每小时任务」(存用户库、便签提醒等)
set max-socks100套接字连接上限;只能调大不能调到低于当前用量
set allow-dk-cmds1允许 +d/+k 用户使用绑定为 -|- 的命令
set dupwait-timeout5botnet 重名机器人复检等待秒数
set cidr-support01 启用 CIDR 记法 b/e/I 模式;网络不支持时不要开
set show-uname10 则不在 motd 等处展示操作系统信息
set firewall / set nat-ip注释状态代理/NAT 环境的外联地址与对外 IP
set reserved-portrange注释状态限定 DCC 文件传输端口范围,如 2010:2020

另外两条安全相关的 unbind(默认状态值得知道):

#unbind dcc n tcl *dcc:tcl      # 取消注释可彻底禁用 .tcl
#unbind dcc n set *dcc:set      # 取消注释可彻底禁用 .set
unbind dcc n simul *dcc:simul   # 默认已禁用 .simul(操纵他人 partyline 会话)

5.8 加密与脚本扩展模块(PBKDF2 / BLOWFISH / PYTHON)

Eggdrop 没有加密模块会拒绝启动(用户库口令要哈希存储)。

参数默认值说明
loadmodule pbkdf2启用1.9.0 起的主力哈希模块;新机器人只加载它即可
set pbkdf2-method"SHA256"哈希算法(openssl list -digest-algorithms 可查可选值)
set pbkdf2-rounds16000迭代轮数,越高越抗暴破也越耗时
set remove-pass0迁移完成后是否删除旧 blowfish 哈希。官方警告:不懂不要动,2026 年路线图拟在 2.0 默认开启
loadmodule blowfish启用旧加密模块(2.0 拟移除);1.8 及更早的用户库迁移期要与 pbkdf2 并存,用户首次登录后哈希自动升级为 PBKDF2
set blowfish-use-modecbcTcl encrypt/decrypt 命令用 CBC(1.9 前默认不安全的 ECB)
#loadmodule python注释状态Python 脚本扩展(需 Python ≥ 3.8),加载后用 pysource 引入 .py

⚠️ botnet 内所有机器人的加密模块配置必须一致,否则链接时出现口令问题(官方注释原文)。

5.9 CHANNELS MODULE(频道体系)

loadmodule channels 是机器人进频道的前提;set chanfile 指定频道动态数据落盘文件。

新频道(.+chan)默认值一组:

参数默认值说明
set default-chanmode"nt"强制频道模式(+n 禁止外部消息、+t 仅 op 改主题)
set default-flood-chan15:60频道消息洪水阈值(条数:秒),0 或 0:X 关闭防护
set default-flood-deop/kick3:10deop/kick 洪水阈值
set default-flood-join5:60加入洪水阈值
set default-flood-ctcp3:60CTCP 洪水阈值
set default-flood-nick5:60改名洪水阈值
set default-aop-delay5:30自动 op/voice 随机延迟(秒区间,防模式刷屏)
set default-idle-kick0闲置踢出分钟数,0 不踢
set default-ban-type3封禁掩码类型 3 = *!*user@*.host(0-39 共 40 种掩码模板)
set default-ban-time120临时封禁分钟数,0 永不解封
set default-exempt-time / default-invite-time60临时豁免/邀请分钟数(IRCnet 特性)
set default-stopnethack-mode0对带 serverop 进频道者的处置(0 关闭,共 7 档)
set default-revenge-mode0报复模式惩罚力度:0 仅 deop → 3 deop+标记+踢+封
set default-chanset一长串新频道开关模板,如 +greet +cycle +protectops +dynamicbans -autoop ...

配置文件里直接登记频道(官方更推荐 partyline .+chan,会写入 chanfile 持久化):

#channel add #lamest

.chaninfo 实测可查看某频道全部生效项(节选):

Settings for dynamic channel #eggdrop-test:
Protect modes (chanmode): +tn
ban-type: 3
ban-time: 120
Other modes:
     +greet          +cycle          +dontkickops    +protectops
     +dynamicbans    +userbans       ...
flood settings: chan ctcp join kick deop nick
number:           15    3    5    3    3    5
time  :           60   60   60   10   10   60

5.10 SERVER MODULE(IRC 服务器接入)

参数默认值说明
loadmodule server启用不加载等于完全不上 IRC(旧 NO_IRC)
set net-type"EFnet"网络类型:EFnet/IRCnet/Undernet/DALnet/Libera/freenode/QuakeNet/Rizon/Twitch/Other;影响 IRC 模块若干行为
set nick"Lamestbot"机器人 IRC 昵称(也是 botnet 昵称,除非另设 botnet-nick)
set altnick"Llamab?t"昵称被占时的备选,? 替换为随机数字
set realname"/msg LamestBot hello"realname 字段,不能为空
set default-port6667server add 未写端口时的默认
server add <host> [port [password]]示例地址服务器列表,断线按序轮询;端口前加 + 走 SSL,如 server add ssl.example.net +7000;1.9.0 起的新语法,旧 set servers {} 已废弃
set ssl-verify-server0IRC 服务器证书验证(取值同 5.6 验证策略)

连接后自动执行的初始化脚本(NickServ 认证在这取消注释):

bind evnt - init-server evnt:init_server

proc evnt:init_server {type} {
  global botnick
  putquick "MODE $botnick +i-ws"
#  putserv "PRIVMSG NickServ :identify <password>"
}

5.11 CAP Features(IRCv3 与 SASL)

Eggdrop 原生支持的 IRCv3 能力:account-notify, account-tag, away-notify, chghost, echo-message, extended-join, invite-notify, message-tags, server-time, sasl, setname, +typing(服务器支持情况可用 partyline .tcl cap ls 查询)。

参数默认值说明
set sasl注释状态1 则在注册阶段即向 NickServ 做 SASL 认证,省去事后 /msg identify
set sasl-mechanism00 PLAIN / 1 ECDSA-NIST256P-CHALLENGE / 2 EXTERNAL / 3 SCRAM-SHA-256 / 4 SCRAM-SHA-512
set sasl-username / sasl-password注释状态NickServ 账号口令
set sasl-continue1SASL 失败后:0 断开重试直到成功;1 不带认证继续连
set sasl-timeout15SASL 认证超时秒数
set account-notify1默认已开:跟踪他人账号登录状态
set extended-join1默认已开:join 消息携带账号与真实名
set cap-request注释状态额外 CAP 能力,空格分隔

5.12 CTCP / IRC / TWITCH

CTCP 模块:

参数默认值说明
loadmodule ctcp启用不加载则 CTCP CHAT 不可用
set ctcp-mode00 正常应答;1 仅应答 +o 用户的 CHAT/PING;2 正常但按 flood-ctcp 限流
ctcp-version 等脚本变量可自定义 CTCP VERSION/FINGER/USERINFO 应答,降低机器人辨识度

IRC 模块关键项:

参数默认值说明
set learn-users01 允许用户 /msg bot hello 自助注册
set wait-split600等 netsplit 对方回归的秒数(IRCnet 建议 1500)
set wait-info180用户离频道多久后重新展示其 info 行
set mode-buf-length200发给服务器的 mode 参数最大字节数
set opchars"@"识别为 op 的前缀字符;UnrealIRCd 类网络用 "@&~"
set no-chanrec-info01 则对无频道记录用户也展示 info 行
set prevent-mixing1仅 net-type=IRCnet 用:b/o/v 与 e/I 模式不混发
set bounce-bans/exempts/invites/modes0是否反弹服务器下发的对应模式
unbind msg - ident *msg:ident启用默认解绑私信 ident/addhost 命令,防暴破口令

TWITCH 模块(#loadmodule twitch,默认关):仅在连接 Twitch 平台时加载,Twitch 的 IRC 网关不遵循 RFC。

5.13 TRANSFER / SHARE / COMPRESS / FILESYSTEM

参数默认值说明
#loadmodule transfer注释状态DCC SEND/GET 与用户库传输支持
set max-dloads3每用户并发下载上限
set dcc-block0DCC 块大小,0 = turbo-dcc(官方推荐)
set xfer-timeout30传输闲置超时秒数
#loadmodule share注释状态两台直连机器人间共享用户库(botnet 核心)
set private-global / private-globals / private-user注释状态共享时拒收对端哪些改动;hub 上建议开 private-user
#loadmodule compress注释状态用户库共享压缩(依赖 share 模块)
set share-compressed1压缩传输开关
#loadmodule filesys注释状态把机器人变成文件服务器
set files-path / incoming-path示例路径文件区根目录 / 上传目录(空串禁上传)
set max-filesize1024接收文件上限 KB,0 不限

5.14 NOTES / CONSOLE / 杂项模块

模块/参数默认值说明
loadmodule notes启用用户间离线便签
set notefile"LamestBot.notes"便签存储文件
set max-notes50每用户便签上限(防洪水)
set note-life60便签保留天数
set notify-onjoin1用户进频道时提醒有未读便签
loadmodule console启用退出时保存各人控制台设置
set console-autosave1自动保存,否则需手动 .store
#loadmodule woobie注释状态模块编写示范,无实际用途
#loadmodule seen注释状态seen 查询(更强大的替代品是第三方 gseen.mod)
#loadmodule assoc注释状态给 botnet 频道命名
loadmodule uptime启用向 eggheads.org 上报在线时长;介意隐私就注释掉
#loadmodule ident注释状态对接 oidentd(ident-method 0)或内置 identd(ident-method 1,需绑定 113 端口权限)

第二个防呆 die 就在 NOTES 段末尾(1564 行),紧随其后的还有一行源码目录检测:在编译目录里直接运行会被 die {You are attempting to run Eggdrop from the source directory...} 拦下。

5.15 WEBUI / AUTOSCRIPTS / 脚本加载

#### WEBUI MODULE ####
#loadmodule webui
#listen 8080 webui        # http
#listen +8443 webui       # https(需先配 ssl-certificate)

WebUI 是 1.10 新增的 Web 管理界面,默认关闭;开启方式即加载模块 + 一条专用 listen。

##### AUTOSCRIPTS #####
source scripts/autoscripts.tcl

##### TCL SCRIPTS #####
source scripts/alltools.tcl
source scripts/action.fix.tcl
source scripts/dccwhois.tcl
source scripts/userinfo.tcl
loadhelp userinfo.help
#source scripts/compat.tcl     # 老脚本兼容层,可能与新脚本冲突

##### PYTHON SCRIPTS #####
# pysource scripts/mypythonscript.py

⚠️ 实测提示:Autoscripts 依赖 Tcl 的 json 包(Ubuntu 由 tcllib 提供),缺失时启动日志报 json is not installed. Autoscripts cannot load,不影响核心功能,apt-get install -y tcllib 后重启消除。

六、生产配置最小模板

把「能安全跑起来」的最小改动集汇总如下(基于 1.10.2 官方 eggdrop.conf,改动项即安装篇 5.6 表格的扩展):

##### 基础 #####
set username "mybot"
set admin "admin <email: admin@example.com>"
set network "ExampleNet"
set timezone "Asia/Shanghai"
set env(TZ) "$timezone"

##### 文件 #####
set userfile "mybot.user"
set chanfile "mybot.chan"
set pidfile "pid.mybot"

##### 监听(务必改掉 3333) #####
listen 3333 all

##### 安全 #####
set owner "admin"
set must-be-owner 1
set telnet-flood 5:60

##### 服务器与频道 #####
set nick "mybot"
set altnick "mybot?"
set realname "Example IRC bot"
set net-type "Other"
server add irc.example.com 6667
channel add #mychannel

##### 两个 die 防呆行:删除 #####

改完保存,partyline 执行 .rehash 热加载(或首次直接启动)。

七、常见问题

Q1:改完配置不重启能生效吗? 绝大多数能。partyline 执行 .rehash 即可(实测回显见第四节)。例外:max-logs 调小、部分结构性变更需完整重启。

Q2:.set 改的参数重启后丢了? .set 只改运行时内存,不回写配置文件。要持久化必须编辑 conf 文件。

Q3:telnet 连 3333 被拒/无监听? listen 行默认是注释的(#listen 3333 all),必须取消注释;改完 .rehash,用 ss -ltn | grep 3333 验证。生产环境同时把 3333 改成冷门端口并收紧 telnet-flood。

Q4:.tcl 提示 What? You need '.help'? must-be-owner 1(默认)下 .tcl 仅永久 owner 可用,而永久 owner 必须在配置文件里用 set owner "admin" 显式声明(telnet NEW 注册的 owner 不算)。加配置 + .rehash 后实测 .tcl expr {2+3} 返回 Tcl: 5。

Q5:SSL 端口(listen +5555 all)起不来? ssl-privatekey 与 ssl-certificate 两个都必须设置(官方原文标注 MUST be uncommented)。安装目录执行 make sslcert 可一键生成自签名对。

Q6:.rehash 后报 json is not installed. Autoscripts cannot load? 非错误。Autoscripts 自动脚本机制依赖 tcllib;需要它时 apt-get install -y tcllib 并重启,否则忽略。

Q7:pbkdf2 和 blowfish 两个模块都要加载吗? 全新机器人:只加载 pbkdf2 即可。从 1.8 及更早迁移用户库:两个都加载,用户首次登录后哈希自动升级为 PBKDF2,最终可移除 blowfish。botnet 内各机器人此项配置必须一致。

八、参考链接