show commit message; added nimc cfg
[d2df-bot.git] / src / commands.nim
blob77fd2ff15dbdff96dd95caaadf76249fe8843a8b
1 import irc, strutils, tables, threadpool\r
2 import config, utils, master, buildsys\r
3 \r
4 type\r
5   BotCommandProc* = proc (irc: Irc, ev: IrcEvent, args: string)\r
6 \r
7 var botCommands*: Table[string, BotCommandProc]\r
8 var memos = initTable[string, seq[tuple[s: string, m: string]]]()\r
9 \r
10 proc checkServerChanges*(irc: Irc) =\r
11   if updateServerList():\r
12     if serverListNewServer != "":\r
13       serverList.withValue(serverListNewServer, s) do:\r
14         irc.privmsg(ircChannel, "new server: '$1'" % [s.name])\r
15       serverListNewServer = ""\r
16     if serverListNewPlayer != "":\r
17       serverList.withValue(serverListNewPlayer, s) do:\r
18         irc.privmsg(ircChannel, "player joined '$1' ($2)" % [s.name, s.players])\r
19       serverListNewPlayer = ""\r
21 proc checkBuildFinished*(irc: Irc) =\r
22   if buildFinished:\r
23     sync()\r
24     if buildSuccess:\r
25       irc.privmsg(buildOrigin, "build finished. binaries available @ " & buildLink)\r
26     else:\r
27       irc.privmsg(buildOrigin, "build failed")\r
28     buildFinished = false\r
30 proc checkRebuildNeeded*(irc: Irc) =\r
31   if not buildInProgress and shouldUpdate():\r
32     irc.privmsg(ircChannel, "commit to $1 detected ($2), rebuilding" % [buildGitPath, lastCommitMsg])\r
33     buildOrigin = ircChannel\r
34     spawn attemptBuild()\r
36 proc checkMemos*(irc: Irc, ev: IrcEvent) =\r
37   if ev.nick in memos:\r
38     for memo in memos[ev.nick]:\r
39       let (s, m) = memo\r
40       irc.privmsg(ev.origin, "$1: message from $2: $3" % [ev.nick, s, m])\r
41     memos.del(ev.nick)\r
43 proc cmdVersion(irc: Irc, ev: IrcEvent, args: string) =\r
44   irc.privmsg(ev.origin, "#doom2d bot ver. " & botVersion & ", by fgsfds")\r
46 proc cmdCommands(irc: Irc, ev: IrcEvent, args: string) =\r
47   var s = ""\r
48   for k in botCommands.keys():\r
49     s &= " " & k\r
50   irc.privmsg(ev.origin, "available commands:" & s)\r
52 proc cmdServerlist(irc: Irc, ev: IrcEvent, args: string) =\r
53   if not updateServerList():\r
54     irc.privmsg(ev.origin, "couldn't fetch fresh list, using stored list.")\r
55   if serverList.len == 0:\r
56     irc.privmsg(ev.origin, "server list is empty.")\r
57   else:\r
58     var n = serverList.len\r
59     irc.privmsg(ev.origin, "got $1 $2:" % [$n, "server".plural(n)])\r
60     for v in serverList.values():\r
61       irc.privmsg(ev.origin, $v)\r
62   serverListNewPlayer = ""\r
63   serverListNewServer = ""\r
65 proc cmdBuild(irc: Irc, ev: IrcEvent, args: string) =\r
66   if buildInProgress:\r
67     irc.privmsg(ev.origin, "already building")\r
68   else:\r
69     getLastCommitMsg(true)\r
70     irc.privmsg(ev.origin, "attempting to build d2df-sdl ($1)..." % [lastCommitMsg])\r
71     buildOrigin = ev.origin\r
72     spawn attemptBuild()\r
74 proc cmdEcho(irc: Irc, ev: IrcEvent, args: string) =\r
75   irc.privmsg(ev.origin, "$1: $2" % [ev.nick, args])\r
77 proc cmdRoll(irc: Irc, ev: IrcEvent, args: string) =\r
78   var nargs = args.strip()\r
79   if nargs == "": nargs = "1d6"\r
80   irc.privmsg(ev.origin, "$1: $2" % [ev.nick, diceResult(nargs)])\r
82 proc cmdMemo(irc: Irc, ev: IrcEvent, args: string) =\r
83   let argv = args.strip().splitWhitespace()\r
84   if argv.len < 2:\r
85     irc.privmsg(ev.origin, "expected at least 2 words")\r
86     return\r
87   let nick = argv[0].strip()\r
88   if nick == "":\r
89     irc.privmsg(ev.origin, "expected non-empty nick")\r
90     return\r
91   if nick in memos:\r
92     memos[nick].add((ev.nick, argv[1 .. ^1].join(" ")))\r
93   else:\r
94     memos[nick] = @[(ev.nick, argv[1 .. ^1].join(" "))]\r
95   irc.privmsg(ev.origin, "$1: message will be delivered to $2 when they say something" % [ev.nick, nick])\r
97 botCommands = initTable[string, BotCommandProc](16)\r
98 botCommands["version"] = cmdVersion\r
99 botCommands["commands"] = cmdCommands\r
100 botCommands["serverlist"] = cmdServerlist\r
101 botCommands["build"] = cmdBuild\r
102 botCommands["echo"] = cmdEcho\r
103 botCommands["roll"] = cmdRoll\r
104 botCommands["memo"] = cmdMemo\r