66 lines
1.7 KiB
Nim
66 lines
1.7 KiB
Nim
|
import toxcore
|
||
|
|
||
|
import std/asyncdispatch, std/json, std/httpclient
|
||
|
|
||
|
const spaceApiUrl = "http://spaceapi.hq.c3d2.de:3000/spaceapi.json"
|
||
|
|
||
|
const adminIds = [
|
||
|
toAddress "DF0AC9107E0A30E7201C6832B017AC836FBD1EDAC390EE99B68625D73C3FD929FB47F1872CA4"
|
||
|
# Emery
|
||
|
]
|
||
|
|
||
|
proc bootstrap(bot: Tox) =
|
||
|
const servers = [ ("tox.neuland.technology", "15E9C309CFCB79FDDF0EBA057DABB49FE15F3803B1BFF06536AE2E5BA5E4690E".toPublicKey ) ]
|
||
|
for host, key in servers.items:
|
||
|
bot.bootstrap(host, key)
|
||
|
|
||
|
proc addAdmin(bot: Tox; id: Address) =
|
||
|
discard bot.addFriend(
|
||
|
id, "You have been granted administrative rights to " & bot.name)
|
||
|
|
||
|
proc setupCallbacks(bot: Tox) =
|
||
|
|
||
|
#[
|
||
|
bot.onConferenceInvite do (friend: Friend; kind: TOX_CONFERENCE_TYPE;
|
||
|
cookie: string):
|
||
|
discard bot.join(friend, cookie)
|
||
|
]#
|
||
|
|
||
|
bot.onFriendMessage do (f: Friend; msg: string; kind: TOX_MESSAGE_TYPE):
|
||
|
echo msg
|
||
|
|
||
|
for id in adminIds:
|
||
|
bot.addAdmin(id)
|
||
|
|
||
|
proc newBot(name: string): Tox =
|
||
|
result = newTox do (opts: Options):
|
||
|
opts.localDiscoveryEnabled = true
|
||
|
opts.ipv6Enabled = true
|
||
|
result.name = name
|
||
|
result.setupCallbacks()
|
||
|
result.bootstrap()
|
||
|
echo result.name, " is at ", result.address
|
||
|
|
||
|
proc updateStatus(bot: Tox; http: AsyncHttpClient) {.async.} =
|
||
|
let
|
||
|
rsp = await http.get(spaceApiUrl)
|
||
|
body = await rsp.body
|
||
|
space = parseJson body
|
||
|
status = $(space["status"])
|
||
|
if bot.statusMessage != status:
|
||
|
bot.statusMessage = $(space["status"])
|
||
|
|
||
|
proc main() =
|
||
|
let
|
||
|
bot = newBot("HQ Bot")
|
||
|
http = newAsyncHttpClient()
|
||
|
|
||
|
addTimer(20*1000, oneshot=false) do (fd: AsyncFD) -> bool:
|
||
|
asyncCheck updateStatus(bot, http)
|
||
|
|
||
|
while true:
|
||
|
iterate bot
|
||
|
poll bot.iterationInterval
|
||
|
|
||
|
main()
|