telegram-bot-ruby, Telegram Bot的ruby 包装器

分享于 

8分钟阅读

GitHub

  繁體 雙語
Ruby wrapper for Telegram's Bot API
  • 源代码名称:telegram-bot-ruby
  • 源代码网址:http://www.github.com/atipugin/telegram-bot-ruby
  • telegram-bot-ruby源代码文档
  • telegram-bot-ruby源代码下载
  • Git URL:
    git://www.github.com/atipugin/telegram-bot-ruby.git
    Git Clone代码到本地:
    git clone http://www.github.com/atipugin/telegram-bot-ruby
    Subversion代码到本地:
    $ svn co --depth empty http://www.github.com/atipugin/telegram-bot-ruby
    Checked out revision 1.
    $ cd repo
    $ svn up trunk
    
    telegram-bot-ruby

    telegram Bot的ruby 包装器。

    Gem VersionMaintainabilityBuild StatusSay Thanks!

    安装

    在你的Gemfile添加以下行:

    gem 'telegram-bot-ruby'

    然后执行:

    $ bundle

    或者安装它的系统宽:

    $ gem install telegram-bot-ruby

    用法

    首先,你需要为你的bot获取一个标记( )。 然后创建你的电子邮件 bot,如下所示:

    require'telegram/bot'token ='YOUR_TELEGRAM_BOT_API_TOKEN'Telegram::Bot::Client.run(token) do |bot|
     bot.listen do |message|
     case message.text
     when'/start' bot.api.send_message(chat_id: message.chat.id, text:"Hello, #{message.from.first_name}")
     when'/stop' bot.api.send_message(chat_id: message.chat.id, text:"Bye, #{message.from.first_name}")
     endendend

    注意 bot.api 对象实现了电报API方法。 因此,你可以调用块内的任何方法,而不需要任何问题。 所有方法都可以在 snake_case 和 camelCase notations中使用。

    message 对象同样的事情- 它实现了消息规范,所以你总是知道应该从它得到什么。

    Webhooks

    如果要使用 webhooks 而不是长轮询,那么需要实现自己的回调服务器。 看一下这个 repo 示例。

    自定义键盘

    你可以使用自己的自定义键盘。 以下是一个示例:

    bot.listen do |message|
     case message.text
     when'/start' question ='London is a capital of which country?'# See more: https://core.telegram.org/bots/api#replykeyboardmarkup answers =Telegram::Bot::Types::ReplyKeyboardMarkup. new(keyboard: [%w(A B), %w(C D)], one_time_keyboard:true)
     bot.api.send_message(chat_id: message.chat.id, text: question, reply_markup: answers)
     when'/stop'# See more: https://core.telegram.org/bots/api#replykeyboardremove kb =Telegram::Bot::Types::ReplyKeyboardRemove.new(remove_keyboard:true)
     bot.api.send_message(chat_id: message.chat.id, text:'Sorry to see you go :(', reply_markup: kb)
     endend

    此外,你还可以要求用户使用 KeyboardButton 共享位置或者电话号码:

    bot.listen do |message|
     kb = [
     Telegram::Bot::Types::KeyboardButton.new(text:'Give me your phone number', request_contact:true),
     Telegram::Bot::Types::KeyboardButton.new(text:'Show me your location', request_location:true)
     ]
     markup =Telegram::Bot::Types::ReplyKeyboardMarkup.new(keyboard: kb)
     bot.api.send_message(chat_id: message.chat.id, text:'Hey!', reply_markup: markup)end

    内置键盘

    Bot 2.0 给我们带来了新的嵌入式键盘。 例如:

    bot.listen do |message|
     case message
     whenTelegram::Bot::Types::CallbackQuery# Here you can handle your callbacks from inline buttonsif message.data =='touch' bot.api.send_message(chat_id: message.from.id, text:"Don't touch me!")
     endwhenTelegram::Bot::Types::Message kb = [
     Telegram::Bot::Types::InlineKeyboardButton.new(text:'Go to Google', url:'https://google.com'),
     Telegram::Bot::Types::InlineKeyboardButton.new(text:'Touch me', callback_data:'touch'),
     Telegram::Bot::Types::InlineKeyboardButton.new(text:'Switch to inline', switch_inline_query:'some text')
     ]
     markup =Telegram::Bot::Types::InlineKeyboardMarkup.new(inline_keyboard: kb)
     bot.api.send_message(chat_id: message.chat.id, text:'Make a choice', reply_markup: markup)
     endend

    嵌入式机器人

    如果要创建内联bot插件,请检查下面的示例:

    bot.listen do |message|
     case message
     whenTelegram::Bot::Types::InlineQuery results = [
     [1, 'First article', 'Very interesting text goes here.'],
     [2, 'Second article', 'Another interesting text here.']
     ].map do |arr|
     Telegram::Bot::Types::InlineQueryResultArticle.new(
     id: arr[0],
     title: arr[1],
     input_message_content:Telegram::Bot::Types::InputTextMessageContent.new(message_text: arr[2])
     )
     end bot.api.answer_inline_query(inline_query_id: message.id, results: results)
     whenTelegram::Bot::Types::Message bot.api.send_message(chat_id: message.chat.id, text:"Hello, #{message.from.first_name}!")
     endend

    现在启用了 inline 模式,message 对象可以是消息InlineQuery或者ChosenInlineResult的实例。 因此,你需要检查每个消息的类型并决定如何处理它。

    使用 answer_inline_query,你可以将查询结果发送给用户。 results 字段必须是查询结果对象的array。

    文件上传

    你的机器人甚至可以上传( 相片音频,文件,贴纸,视频) 到电报服务器。 就像这样:

    bot.listen do |message|
     case message.text
     when'/photo' bot.api.send_photo(chat_id: message.chat.id, photo:Faraday::UploadIO.new('~/Desktop/jennifer.jpg', 'image/jpeg'))
     endend

    日志记录

    默认情况下,bot不记录任何( 使用 NullLoger )。 你可以更改这里行为并提供自己的记录器类。 请参见下面的示例:

    Telegram::Bot::Client.run(token, logger:Logger.new($stderr)) do |bot|
     bot.logger.info('Bot has been started')
     bot.listen do |message|
     #.. .endend

    连接适配器

    由于 0.5.0的版本,我们依赖于法拉。 你可以使用任何受支持的适配器( 例如 net/http/persistent ):

    require'net/http/persistent'Telegram::Bot.configure do |config|
     config.adapter =:net_http_persistentend

    Boilerplates

    如果你不知道如何为你的shell设置数据库或者如何使用不同的语言,有些boilerplates可以帮助你快速启动:

    • fork
    • 创建你的功能分支( git checkout -b my-new-feature )
    • 提交更改( git提交 -am'添加一些特性'
    • 推送到分支( git push 原点 my-new-feature )
    • 创建新的拉请求

    API  WRAP  换行  bot  TEL  Telegram  
    相关文章