# 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

