Last active
May 9, 2021 13:33
-
-
Save alifarazz/1a88b3d9542cd44fdb819ed132504906 to your computer and use it in GitHub Desktop.
Chuck Norris awful joke bot
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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(""", "\"") | |
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) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
[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