151 lines
4.8 KiB
Markdown
151 lines
4.8 KiB
Markdown
|
|
# IRC → Kosmi Relay Troubleshooting
|
||
|
|
|
||
|
|
**Date**: 2025-10-31
|
||
|
|
**Issue**: Messages from Kosmi → IRC work perfectly. Messages from IRC → Kosmi do NOT work.
|
||
|
|
|
||
|
|
## Current Status
|
||
|
|
|
||
|
|
✅ **Working**: Kosmi → IRC
|
||
|
|
❌ **Not Working**: IRC → Kosmi
|
||
|
|
|
||
|
|
## Symptoms
|
||
|
|
|
||
|
|
1. **No IRC message logs**: The bridge shows ZERO indication that IRC messages are being received
|
||
|
|
2. **No debug output**: Even with `Debug=true` and `DebugLevel=1`, we see NO IRC protocol messages in logs
|
||
|
|
3. **Only Kosmi messages appear**: Logs only show Kosmi→IRC relay activity
|
||
|
|
|
||
|
|
## What We Know Works
|
||
|
|
|
||
|
|
- **IRC Connection**: `Connection succeeded` message appears
|
||
|
|
- **Channel Join Request**: `irc.libera: joining #cottongin` message appears
|
||
|
|
- **Kosmi → IRC**: Messages from Kosmi successfully appear in IRC
|
||
|
|
- **Bridge Startup**: Gateway starts successfully
|
||
|
|
|
||
|
|
## What's Missing
|
||
|
|
|
||
|
|
- **No PRIVMSG logs**: The `handlePrivMsg` function should log `== Receiving PRIVMSG` but doesn't
|
||
|
|
- **No debug protocol messages**: With `DebugLevel=1` we should see ALL IRC protocol traffic
|
||
|
|
- **No JOIN confirmation**: We never see confirmation that the bot actually joined the channel
|
||
|
|
|
||
|
|
## Possible Causes
|
||
|
|
|
||
|
|
### 1. Bot Not Actually in Channel
|
||
|
|
**Symptom**: The bot might not have successfully joined #cottongin
|
||
|
|
**How to check**: Look at the user list in #cottongin - is `kosmi-relay` there?
|
||
|
|
**Why**: IRC servers can silently fail channel joins for various reasons (invite-only, banned, etc.)
|
||
|
|
|
||
|
|
### 2. Channel Name Mismatch
|
||
|
|
**Current config**: Channel is `#cottongin`
|
||
|
|
**Check**: Is the channel name exactly correct? (case-sensitive, # prefix?)
|
||
|
|
|
||
|
|
### 3. Message Handler Not Registered
|
||
|
|
**Possible issue**: The PRIVMSG handler might not be properly registered
|
||
|
|
**Evidence**: No debug logs at all from IRC message handling
|
||
|
|
|
||
|
|
### 4. IRC Bridge Not Receiving Events
|
||
|
|
**Possible issue**: The `girc` IRC library might not be firing events
|
||
|
|
**Evidence**: Zero IRC protocol messages in logs even with DebugLevel=1
|
||
|
|
|
||
|
|
## Configuration
|
||
|
|
|
||
|
|
Current `matterbridge.toml` IRC section:
|
||
|
|
```toml
|
||
|
|
[irc.libera]
|
||
|
|
Server="irc.zeronode.net:6697"
|
||
|
|
Nick="kosmi-relay"
|
||
|
|
DebugLevel=1
|
||
|
|
UseTLS=true
|
||
|
|
SkipTLSVerify=false
|
||
|
|
Channels=["#cottongin"]
|
||
|
|
Debug=true
|
||
|
|
```
|
||
|
|
|
||
|
|
Current gateway configuration:
|
||
|
|
```toml
|
||
|
|
[[gateway.inout]]
|
||
|
|
account="irc.libera"
|
||
|
|
channel="#cottongin"
|
||
|
|
```
|
||
|
|
|
||
|
|
## Diagnostic Steps
|
||
|
|
|
||
|
|
### Step 1: Verify Bot is in Channel ✋ **NEEDS USER CONFIRMATION**
|
||
|
|
|
||
|
|
**Action Required**: Check if `kosmi-relay` appears in the #cottongin user list
|
||
|
|
|
||
|
|
If NO:
|
||
|
|
- Bot failed to join (permissions, invite-only, ban, etc.)
|
||
|
|
- Need to check IRC server response
|
||
|
|
|
||
|
|
If YES:
|
||
|
|
- Bot is in channel but not receiving messages
|
||
|
|
- Proceed to Step 2
|
||
|
|
|
||
|
|
### Step 2: Check IRC Server Responses
|
||
|
|
|
||
|
|
The lack of debug output suggests the IRC library isn't logging anything. This could mean:
|
||
|
|
- The IRC event handlers aren't being called
|
||
|
|
- The debug configuration isn't being applied correctly
|
||
|
|
- There's a deeper issue with the IRC bridge initialization
|
||
|
|
|
||
|
|
### Step 3: Test with Manual IRC Message
|
||
|
|
|
||
|
|
**Request**: Please send a test message in #cottongin IRC channel
|
||
|
|
**Watch for**: Any log output mentioning IRC, PRIVMSG, or message reception
|
||
|
|
|
||
|
|
### Step 4: Check for Silent Errors
|
||
|
|
|
||
|
|
Look for any errors that might be silently dropped:
|
||
|
|
```bash
|
||
|
|
docker-compose logs | grep -iE "(error|fail|warn)" | grep -i irc
|
||
|
|
```
|
||
|
|
|
||
|
|
## Code Analysis
|
||
|
|
|
||
|
|
### How IRC Messages Should Flow
|
||
|
|
|
||
|
|
1. IRC server sends PRIVMSG to bot
|
||
|
|
2. `girc` library receives it and fires event
|
||
|
|
3. `handlePrivMsg` function is called (line 193 of handlers.go)
|
||
|
|
4. `skipPrivMsg` check (line 194) - returns true if message is from bot itself
|
||
|
|
5. If not skipped, logs: `== Receiving PRIVMSG: ...` (line 205)
|
||
|
|
6. Creates `config.Message` (line 198-203)
|
||
|
|
7. Sends to gateway via `b.Remote <- rmsg` (line 255)
|
||
|
|
8. Gateway routes to Kosmi bridge
|
||
|
|
9. Kosmi `Send` method is called (line 106 of kosmi.go)
|
||
|
|
10. Message sent via `SendMessage` to Kosmi WebSocket
|
||
|
|
|
||
|
|
### Where the Flow is Breaking
|
||
|
|
|
||
|
|
The logs show **NOTHING** from steps 1-7. This means:
|
||
|
|
- Either the message never reaches the bot
|
||
|
|
- Or the event handler isn't firing
|
||
|
|
- Or messages are being filtered before logging
|
||
|
|
|
||
|
|
## Next Steps
|
||
|
|
|
||
|
|
1. ✋ **USER**: Confirm if `kosmi-relay` bot is visible in #cottongin user list
|
||
|
|
2. ✋ **USER**: Send a test message in IRC: "TEST FROM IRC TO KOSMI"
|
||
|
|
3. Check logs for any indication of message reception
|
||
|
|
4. If still nothing, we may need to:
|
||
|
|
- Add explicit logging to the IRC bridge code
|
||
|
|
- Rebuild the Docker image with instrumentation
|
||
|
|
- Check if there's a gateway routing issue
|
||
|
|
|
||
|
|
## Temporary Workaround
|
||
|
|
|
||
|
|
None available - this is core functionality.
|
||
|
|
|
||
|
|
## Related Files
|
||
|
|
|
||
|
|
- `bridge/irc/handlers.go` - IRC message handling
|
||
|
|
- `bridge/irc/irc.go` - IRC bridge main logic
|
||
|
|
- `bridge/kosmi/kosmi.go` - Kosmi bridge (Send method)
|
||
|
|
- `matterbridge.toml` - Configuration
|
||
|
|
- `gateway/router.go` - Message routing between bridges
|
||
|
|
|
||
|
|
## Status
|
||
|
|
|
||
|
|
🔴 **BLOCKED**: Waiting for user confirmation on whether bot is in IRC channel
|
||
|
|
|