#!/usr/bin/env fun /* * Minimal example using lib/net/irc.fun * * This demo connects to an IRC server, registers, joins a channel, sends one * message, reads for a short while (responding to PINGs), then quits. * * TLS usage via local tunnel (recommended): * 1) Install stunnel and create a client service (example in repo docs). * 2) Run this script pointing to localhost:, use_tls=1. */ #include #include #include #include // --- Configuration --- // freenode (plain): host="chat.freenode.net", port=6667, use_tls=0 // For TLS via a local tunnel to remote 6697: host="127.0.0.1", port=, use_tls=1 host = "chat.freenode.net" port = 6667 use_tls = 0 nick = "FunDemoBot" // Pick an unused nickname user = "fundemo" real = "Fun Demo Bot" pass = "" // Optional network password (not NickServ) channel = "#fun-lang" // Use a channel you may write to target_nick = "hanez" // For a test private message // Date/time helper dt = DateTime() // Helper: read, answer PINGs, and print lines fun handle_lines(c) lines = c.read_lines() i = 0 while (i < len(lines)) line = lines[i] msg = c.parse_message(line) if (msg["command"] == "PING") t = msg["trailing"] if (len(t) == 0 && len(msg["params"]) > 0) t = msg["params"][0] c.pong(t) print(line) i = i + 1 mode = " (plain)" if (use_tls == 1) mode = " (TLS via tunnel)" print("Connecting to " + host + ":" + to_string(port) + mode) c = IRCClient(host, port, use_tls) if (!c.connect()) print("Failed to connect.") exit(1) c.register(nick, user, real, pass) // Process greetings and auto-respond to PINGs start = dt.now_ms() while (dt.now_ms() - start < 3000) handle_lines(c) // Join and speak c.join(channel) dt.sleep_ms(500) c.privmsg(channel, "Hello from Fun!") // Send a test message to a nick as well c.privmsg(target_nick, "Hi from Fun example script!") // Read a bit more start2 = dt.now_ms() while (dt.now_ms() - start2 < 2000) handle_lines(c) c.quit("bye") dt.sleep_ms(200) c.close() print("Done.")