2
1
Fork
You've already forked calc
1
an IRC bot
  • C 99%
  • Makefile 1%
2026年06月29日 22:00:18 +02:00
.gitignore .gitgnore update. 2026年06月29日 22:00:18 +02:00
AGENTS.md init 2026年06月07日 01:50:05 +02:00
calc.c Fixed multiple critical bugs including race conditions, buffer overflows, and memory visibility issues. Redesigned AI task pipeline for concurrency and improved IRC parsing security. Verified fixes by compiling and manual analysis. 2026年06月29日 18:38:05 +02:00
LICENSE update LICENSE / README 2026年06月07日 01:52:28 +02:00
Makefile bugfix in ssl handling 2026年06月29日 17:31:17 +02:00
README.md — -> - 2026年06月29日 17:00:08 +02:00

calc - Companion AI Logic Chatbot

A single-file IRC bot in C. Features a key-value store backed by SQLite3, weather lookups via wttr.in, and AI-powered replies.

Features

  • Key-Value Store: Persist facts, notes, or any data with calc key = value
  • Weather: Current conditions and 3-day forecasts via wttr.in
  • AI Queries: Ask questions via !ai or by addressing the bot; powered by opencode
  • Chat Greetings: Responds to hi, hello, hey, bye, and more
  • TLS: Secure connections via OpenSSL
  • Rate Limiting: Per-nick protection against spam
  • Single File: Easy to deploy and modify

Requirements

  • gcc (or any C99 compiler)
  • libssl-dev (OpenSSL)
  • libdl (dynamic linker)
  • libsqlite3 (loaded at runtime via dlopen)
  • curl (for weather lookups)
  • opencode (for AI queries - see calc.c:229 to configure path)

Build

make

Set custom compiler or flags:

make CC=clang CFLAGS="-O2 -Wall -Wextra"

Usage

./calc [options]

Options

Option Description
-ssl Enable TLS (auto-enabled on ports 6697/7000)
-noverify Skip TLS certificate verification
-server <host> IRC server (default: irc.libera.chat)
-port <p> Port (default: 6697)
-pass <p> Server password
-nick <n> Nickname (default: calc)
-join <c> Auto-join channels, comma-separated (default: #calctest)
-h Show help

Example

./calc -ssl -nick mybot -join "#mychan,#myotherchan"

IRC Commands

Command Description
calc <key> Look up a stored value
calc <key> = <value> Store a value (key is lowercased)
!ping Responds with pong
!weather [city] Current weather (default: Berlin)
!forecast [city] 3-day forecast (default: Berlin)
!ai <question> Ask the AI a question
!quit / !die Shut down the bot
<nick>: hi Greeting response
<nick>: <question> Ask the bot anything (AI)

Installation

make install

Installs to $(PREFIX)/bin (default: /usr/local/bin).

Override the prefix:

make install PREFIX=$HOME/.local

Database

Data is stored in calc.db (SQLite3) in the working directory. The bot creates two tables:

  • calc - key-value pairs with nick and timestamp metadata
  • ai_pending - single-row table for managing in-flight AI queries

Architecture

calc uses a single poll() loop with a 100ms timeout. AI queries fork a child process that runs the opencode CLI; the parent picks up the result on the next poll iteration. SQLite3 is loaded at runtime via dlopen to avoid a compile-time dependency.

License

MIT - see LICENSE file.