MoonScript IRC bot
Switch branches/tags
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
doc
plugins
.editorconfig
.gitignore
.vimrc
ISSUE_TEMPLATE.md
LICENSE
README.md
compile.sh
config.ld
irc.moon
logger.moon
logo
main.moon
start.sh

README.md

General Information

Project Information

Moon-Moon is an IRC bot run with the Lua programming language; however, the syntax used in the development version is called 'MoonScript' - this syntax can be compiled using Leafo's MoonScript program moonc and then loaded as Lua bytecode.

Dependencies

LuaRocks (recommended)

MoonScript (development)

Lua

cqueues

luafilesystem

Getting Started

Installing Dependencies with LuaRocks

To install rocks locally, pass the --local flag to the luarocks command. This downloads and installs rocks to a local directory without requiring access to system directories. LuaRocks is recommended to allow for easy installation of all the required software.

$ luarocks install cqueues
$ luarocks install luafilesystem
$ luarocks install moonscript # Optional

Configuration

Lua is used as a configuration language; bots must each have their own separate .lua file in $XDG_CONFIG_HOME/moonmoon (which defaults to $HOME/.config).

bot "#!" {
	server = "irc.hashbang.sh";
	port = 6697; -- TLS is automatically set if port == 6697
	autojoin = {
		"#!FusionScript";
	};
};

The Coroutine System

Moon Moon takes advantage of a coroutine-based asynchronous system which allows the software to have multiple things "running" at once - it's almost like having a threaded program, without threads. This offers some advantages:

  1. A single Lua state
  2. Fewer callbacks
  3. Cleaner code base

Adding in a routine to the queue is simple, as demonstrated by the below examples programmed in MoonScript and Lua for convenience:

MoonScript

cqueues = require 'cqueues'
queue   = require 'queue'

queue\wrap ->
	while true
		cqueues.sleep 5
		print 'Hello, World!'

Lua

local cqueues = require("cqueues")
local queue   = require("queue")
queue:wrap(function()
	while true do
		cqueues.sleep(5)
		print("Hello, World!")
	end
end)