Please consider using tourmaline instead
I'll try to keep this library compatible with the future versions of Crystal, but tourmaline is a well designed and maintained library which is superior in every way while sharing the same basics, thus I don't see any value in implementing the same improvements and fragmenting the community
Bug fixes are still welcomed
Telegram Bot API (3.2) wrapper for Crystal
api methods and types:
getting updates:
additional features:
Create your bot by inheriting from TelegramBot::Bot
.
Define which commands your bot handles via the cmd
method in the CmdHandler
module. For example, respond world
to /hello
and perform simple calculation with /add
:
require "telegram_bot"
class MyBot < TelegramBot::Bot
include TelegramBot::CmdHandler
def initialize
super("MyBot", TOKEN)
cmd "hello" do |msg|
reply msg, "world!"
end
# /add 5 7 => 12
cmd "add" do |msg, params|
reply msg, "#{params[0].to_i + params[1].to_i}"
end
end
end
my_bot = MyBot.new
my_bot.polling
MyBot::Log.level = :debug
MyBot::Log.backend = ::Log::IOBackend.new
my_bot = MyBot.new
my_bot.polling
Override any of the following handle
methods to handle Telegram updates, be it messages, inline queries, chosen inline results or callback queries:
def handle(message : Message)
def handle(inline_query : InlineQuery)
def handle(chosen_inline_result : ChosenInlineResult)
def handle(callback_query : CallbackQuery)
def handle_edited(message : Message)
def handle_channel_post(message : Message)
def handle_edited_channel_post(message : Message)
For example, to echo all messages sent to the bot:
class EchoBot < TelegramBot::Bot
def handle(message : Message)
if text = message.text
reply message, text
end
end
end
EchoBot.new.polling
Or to answer inline queries with a list of articles:
class InlineBot < TelegramBot::Bot
def handle(inline_query : TelegramBot::InlineQuery)
results = Array(TelegramBot::InlineQueryResult).new
content = InputTextMessageContent.new "Article details"
results << TelegramBot::InlineQueryResultArticle.new("article/1", "My first article", content)
answer_inline_query(inline_query.id, results)
end
end
InlineBot.new.polling
Remember to enable inline mode in BotFather to support inline queries.
All the examples above use the getUpdates
method, constantly polling Telegram for new updates, by invoking the polling
method on the bot.
Another option is to use the setWebhook
method to tell Telegram where to POST any updates for your bot. Note that you must use HTTPS in this endpoint for Telegram to work, and you can use a self-signed certificate, which you can provide as part of the setWebhook
method:
# Certificate has the contents of the certificate, not the path to it
bot.set_webhook(url, certificate)
After invoking setWebhook
, have your bot start an HTTPS server with the serve
command:
bot.serve("0.0.0.0", 443, "path/to/ssl/certificate", "path/to/ssl/key")
If you run your bot behind a proxy that performs SSL offloading (ie the proxy presents the certificate to Telegram, and then forwards the request to your app using plain HTTP), you may skip the last two parameters, and the bot will listen for HTTP requests instead of HTTPS.
When running your bot in serve
mode, the bot will favour executing any methods by sending a response as part of the Telegram request, rather than executing a new request.
However it's not part of the API you can set black or white lists in the bot's constructor to filter your users by username.
whitelist
: if user is not present on the list (or doesn't have username) the message won't be handled
blacklist
: if user is present on the list the message won't be handled
Add this to your application's shard.yml
:
dependencies:
telegram_bot:
github: hangyas/telegram_bot
Contributing is very welcomed!
CNN link:tf.keras.layers.conv2D 学习 link:tf.keras.layers.MaxPool2D 学习 link:tf.keras.layers.MaxPool2D 示例 池化层 link:卷积神经网络CNNs的调优及性能提升技巧 link:Anaconda官方文档-虚拟环境安装tensorflow link: Anaconda虚拟环境安装tensorflow l