Public Access
IRC: join after NickServ login, keyed auto-join, SASL fallback
- With NickServ, auto-join waits for the logged-in reply (900) or 2 s
at most, so registered-only IRC channels let us in
- A failed SASL login falls back to NickServ (its own password, or the
SASL account and password)
- IDENTIFY names the account explicitly, and once logged in on a
fallback nick, REGAIN takes ours back from a stale session
- Auto-join entries take keys ("#private key, #public"); keys from
/join are reused when rejoining; keyed channels go first in JOIN
- Serial irc dump: whole Buffers, and which login is configured
(never the secrets)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EhqxQ49eCju4CzKYNjZzwT
This commit is contained in:
@@ -294,7 +294,7 @@ void IrcApp::drawSettings(Canvas& c) {
|
||||
c.setTextColor(theme::kMuted);
|
||||
c.drawString(fieldLabel(fields_.selected()).c_str(), 4, area.y + 4);
|
||||
widgets::lineEditor(c, fieldEditor_, {4, area.y + 22, area.w - 8, 0});
|
||||
c.drawString(fields_.selected() == kAutojoin ? "e.g. #roro #meshtastic" : "Enter: OK `: cancel", 4,
|
||||
c.drawString(fields_.selected() == kAutojoin ? "e.g. #roro, #private key" : "Enter: OK `: cancel", 4,
|
||||
area.y + 44);
|
||||
return;
|
||||
}
|
||||
|
||||
+5
-1
@@ -193,11 +193,15 @@ static void serialCommands() {
|
||||
if (line == "irc dump") {
|
||||
Serial.printf("irc: status %d, unread %d, heap %u min %u\n", (int)irc->status(), irc->totalUnread(),
|
||||
ESP.getFreeHeap(), ESP.getMinFreeHeap());
|
||||
IrcConfig c = irc->draftConfig(); // which login is configured, never the secrets
|
||||
Serial.printf("irc: nick %s, sasl %s, nickserv %s, autojoin %u channels\n", c.nick.c_str(),
|
||||
c.saslUser.empty() || c.saslPassword.empty() ? "off" : "on",
|
||||
c.nickservPassword.empty() ? "off" : "on", (unsigned)c.autojoin.size());
|
||||
irc->withSession([](IrcSession& s) {
|
||||
for (int i = 0; i < s.bufferCount(); i++) {
|
||||
const auto& b = s.buffer(i);
|
||||
Serial.printf("irc buffer %d %s unread %d%s\n", i, b.name.c_str(), b.unread, b.joined ? " joined" : "");
|
||||
size_t from = b.lines.size() > 6 ? b.lines.size() - 6 : 0;
|
||||
size_t from = 0;
|
||||
for (size_t j = from; j < b.lines.size(); j++)
|
||||
Serial.printf(" <%s> %s\n", b.lines[j].nick.c_str(), b.lines[j].text.c_str());
|
||||
}
|
||||
|
||||
@@ -229,6 +229,10 @@ void IrcService::loop() {
|
||||
pingSent_ = true;
|
||||
}
|
||||
}
|
||||
{
|
||||
Lock l(lock_);
|
||||
session_->tick(millis());
|
||||
}
|
||||
flushEffects();
|
||||
vTaskDelay(pdMS_TO_TICKS(open_ ? 30 : 250));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user