~kris/dots

srice

ref: 178c9a25a484ead715392d50e21d03df486b8b41 srice/.config/.mksh/irc.sh -rw-r--r-- 6.7 KiB
178c9a25 — Kris Yotam conky: sync proper config from moirai (was the greenred variant) 2 months ago
                                                                                
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
# irc -- IRC aliases and functions for catgirl + general IRC tools

# ============================================================================
# CATGIRL
# ============================================================================
alias cg='catgirl'
alias cglibera='catgirl libera'
alias cgoftc='catgirl oftc'
alias cgtilde='catgirl tilde'
alias cglog='ls ~/.local/share/catgirl/log/'

# ============================================================================
# SIC (SUCKLESS IRC CLIENT -- MINIMAL)
# ============================================================================
alias siclibera='sic -h irc.libera.chat -p 6697'
alias sicoftc='sic -h irc.oftc.net -p 6697'

# ============================================================================
# IRSSI
# ============================================================================
alias irssi='irssi --config=~/.config/irssi/config --home=~/.config/irssi'
alias irssitm='tmux new-session -d -s irc irssi && tmux attach -t irc'

# ============================================================================
# WEECHAT
# ============================================================================
alias wctm='tmux new-session -d -s weechat weechat && tmux attach -t weechat'
alias wclog='ls ~/.local/share/weechat/logs/'

# ============================================================================
# ZNC (BOUNCER)
# ============================================================================
alias zncstatus='systemctl --user status znc 2>/dev/null || systemctl status znc'
alias zncstart='systemctl --user start znc 2>/dev/null || systemctl start znc'
alias zncrestart='systemctl --user restart znc 2>/dev/null || systemctl restart znc'
alias znclog='tail -f ~/.znc/moddata/log/'
alias zncweb='echo "ZNC web: https://localhost:6697"'

# ============================================================================
# LOG SEARCHING
# ============================================================================
alias ircgrep='grep -rn --include="*.log" --include="*.weechatlog"'
alias irctoday='grep "$(date +%Y-%m-%d)"'
alias irclinks='grep -ohE "https?://[^ ]+"'

# ============================================================================
# NETWORK SHORTCUTS
# ============================================================================
alias libera='echo "irc.libera.chat:6697 (TLS)"'
alias oftc='echo "irc.oftc.net:6697 (TLS)"'
alias efnet='echo "irc.efnet.org:6697 (TLS)"'
alias undernet='echo "irc.undernet.org:6697 (TLS)"'
alias ircnet='echo "irc.ircnet.net:6697 (TLS)"'
alias tilde='echo "irc.tilde.chat:6697 (TLS)"'
alias sucklessirc='echo "irc.oftc.net:6697 #suckless (TLS)"'
alias plan9irc='echo "irc.libera.chat:6697 #cat-v #plan9 (TLS)"'

# ============================================================================
# IRC OVER TOR
# ============================================================================
alias torirc='torsocks catgirl'

# ============================================================================
# CATGIRL HELPERS
# ============================================================================

# search catgirl logs for a term
cggrep() {
    term="$1"; channel="${2:-}"
    [ -z "$term" ] && { echo "Usage: cggrep <term> [channel]"; return 1; }
    logdir="$HOME/.local/share/catgirl/log"
    if [ -n "$channel" ]; then
        grep -rn "$term" "$logdir"/*"$channel"* 2>/dev/null
    else
        grep -rn "$term" "$logdir" 2>/dev/null
    fi
}

# show recent activity across all catgirl logs
cgrecent() {
    count="${1:-20}"
    logdir="$HOME/.local/share/catgirl/log"
    find "$logdir" -name "*.log" -newer "$logdir" -exec tail -1 {} + 2>/dev/null | sort | tail -"$count"
}

# ============================================================================
# WEECHAT HELPERS
# ============================================================================

# search weechat logs
wcgrep() {
    term="$1"; channel="${2:-}"
    [ -z "$term" ] && { echo "Usage: wcgrep <term> [channel]"; return 1; }
    logdir="$HOME/.local/share/weechat/logs"
    if [ -n "$channel" ]; then
        grep -rn "$term" "$logdir"/*"$channel"* 2>/dev/null
    else
        grep -rn "$term" "$logdir" 2>/dev/null
    fi
}

# ============================================================================
# ZNC BOUNCER MANAGEMENT
# ============================================================================

# add a new network to ZNC
zncaddnet() {
    network="$1"; server="$2"; port="${3:-6697}"
    [ -z "$server" ] && { echo "Usage: zncaddnet <name> <server> [port]"; return 1; }
    echo "[*] Add to ZNC webpanel or use:"
    echo "  /znc AddNetwork $network"
    echo "  /znc AddServer $network $server +$port"
    echo "  /znc AddChan $network #channel"
}

# ============================================================================
# GENERAL IRC UTILITIES
# ============================================================================

# extract all URLs from IRC logs
ircurls() {
    file="$1"
    [ -z "$file" ] && { echo "Usage: ircurls <logfile>"; return 1; }
    grep -ohE 'https?://[^ ]+' "$file" | sort -u
}

# count messages per nick in a log
ircstats() {
    file="$1"
    [ -z "$file" ] && { echo "Usage: ircstats <logfile>"; return 1; }
    grep -oE '<[^>]+>' "$file" | sort | uniq -c | sort -rn | head -20
}

# generate an IRC log summary
ircsummary() {
    file="$1"
    [ -z "$file" ] && { echo "Usage: ircsummary <logfile>"; return 1; }
    total=$(wc -l < "$file")
    nicks=$(grep -oE '<[^>]+>' "$file" | sort -u | wc -l)
    urls=$(grep -ohE 'https?://[^ ]+' "$file" | wc -l)
    echo "Lines:    $total"
    echo "Nicks:    $nicks"
    echo "URLs:     $urls"
    echo ""
    echo "Top talkers:"
    grep -oE '<[^>]+>' "$file" | sort | uniq -c | sort -rn | head -5
}

# quick connect function (picks the right client)
ircconnect() {
    network="$1"
    [ -z "$network" ] && { echo "Usage: ircconnect <libera|oftc|tilde|efnet>"; return 1; }
    case "$network" in
        libera)   server="irc.libera.chat"; port=6697 ;;
        oftc)     server="irc.oftc.net"; port=6697 ;;
        tilde)    server="irc.tilde.chat"; port=6697 ;;
        efnet)    server="irc.efnet.org"; port=6697 ;;
        *)        echo "Unknown network: $network"; return 1 ;;
    esac
    if command -v catgirl >/dev/null; then
        catgirl -h "$server" -p "$port"
    elif command -v irssi >/dev/null; then
        irssi -c "$server" -p "$port"
    else
        echo "No IRC client found"
        return 1
    fi
}

# notify on mention (for use in a pipeline: tail -f log | ircnotify nick)
ircnotify() {
    nick="$1"
    [ -z "$nick" ] && { echo "Usage: tail -f <log> | ircnotify <nick>"; return 1; }
    while IFS= read -r line; do
        if echo "$line" | grep -qi "$nick"; then
            notify-send "IRC Mention" "$line" 2>/dev/null
            printf '\007'  # bell
        fi
    done
}