Skip to content

Instantly share code, notes, and snippets.

@alifarazz
Last active May 9, 2021 13:33
Show Gist options
  • Save alifarazz/1a88b3d9542cd44fdb819ed132504906 to your computer and use it in GitHub Desktop.
Save alifarazz/1a88b3d9542cd44fdb819ed132504906 to your computer and use it in GitHub Desktop.
Chuck Norris awful joke bot
import telebot, asyncdispatch, logging, options, parsetoml, strformat,
httpclient, json
from strutils import strip, replace
var L = newConsoleLogger(fmtStr="$levelname, [$time] ")
addHandler(L)
var proxyURL{.threadvar}: string
#[
The proxy should be an http one. If you have a socks based proxy,
use a program like pproxy[1] to get an http proxy out of it:
$ pproxy -r socks5://<socks proxy IP>:<socks proxy PORT> -vv
[1]: https://github.com/qwj/python-proxy
]#
proc updateHandler(b: Telebot, u: Update): Future[bool] {.async.} =
if not u.message:
return true
let response = u.message.get
if response.text:
let text = "Ask for /joke and you shall receive one." # response.text.get
discard await b.sendMessage(response.chat.id,
text,
parseMode = "markdown",
disableNotification = true)
proc jokeAPI(firstname, lastname:string): Future[string] {.async.} =
let lastnameOption = if lastname.len == 0: "" else: "&lastName={lastname}"
let url = &"http://api.icndb.com/jokes/random?firstName={firstname}{lastnameOption}"
let proxy = newProxy proxyURL
var client = newAsyncHttpClient(proxy=proxy)
debugEcho("GET: ", url)
let response = await client.getContent(url)
debugEcho("Respone: ", url, ": ", response)
let responseJson = response.parseJson()
result = if responseJson["type"].getStr == "success":
responseJson["value"]["joke"].getStr().replace("&quot;", "\"")
else:
"Bot encountered some problems, please try again later."
proc commandHandler(b: Telebot, c: Command): Future[bool] {.async.} =
let msg = await jokeAPI(c.message.fromUser.get().firstname,
c.message.fromUser.get().lastname.get "")
asyncCheck b.sendMessage(c.message.chat.id,
msg,
disableNotification = true,
# replyToMessageId = c.message.messageId
)
result = true
when isMainModule:
let configs = parsetoml.parseFile "config.toml"
proxyURL = configs["internet"]["proxy"].getStr ""
let api_key = configs["credentials"]["bot_key"].getStr ""
let bot = newTeleBot(api_key)
if proxyURL.len != 0:
bot.setProxy proxyURL
bot.onUpdate(updateHandler) # bot.onUpdate(updateHandler)
bot.onCommand("joke", commandHandler)
bot.poll(timeout=300)
[internet]
proxy="http://ip:port"
[credentials]
bot_key="????"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment