Class: Telepost

Inherits:
Object
  • Object
show all
Defined in:
lib/telepost.rb

Overview

Telepost is a simple gateway to Telegram, which can post messages and respond to primitive requests:

require 'telepost'
tp = Telepost.new('... secret token ...')
tp.run do |chat, msg|
  # Reply to the message via tp.post(msg, chat)
end

For more information read README file.

Author

Yegor Bugayenko ([email protected])

Copyright

Copyright © 2018 Yegor Bugayenko

License

MIT

Defined Under Namespace

Classes: CantPost, Fake

Instance Method Summary collapse

Constructor Details

#initialize(token, chats: []) ⇒ Telepost

Makes a new object. To obtain a token you should talk to the @BotFather in Telegram.



68
69
70
71
72
# File 'lib/telepost.rb', line 68

def initialize(token, chats: [])
  @token = token
  @client = Telebot::Client.new(token)
  @chats = chats
end

Instance Method Details

#post(chat, *lines) ⇒ Object

Post a single message to the designated chat room. The chat argument can either me an integer, if you know the chat ID, or the name of the channel (your bot has to be the admin there). The lines provided will be concatenated with a space between them.



103
104
105
106
107
108
109
110
111
112
113
# File 'lib/telepost.rb', line 103

def post(chat, *lines)
  msg = lines.join(' ')
  @client.send_message(
    chat_id: chat,
    parse_mode: 'Markdown',
    disable_web_page_preview: true,
    text: msg
  )
rescue Telebot::Error => e
  raise CantPost, "#{e.message}: \"#{msg}\""
end

#runObject

You can run a chat bot to listen to the messages coming to it, in a separate thread.



76
77
78
79
80
81
82
83
84
85
86
87
# File 'lib/telepost.rb', line 76

def run
  Telebot::Bot.new(@token).run do |chat, message|
    if block_given?
      yield(chat, message)
    elsif !chat.nil?
      post(
        "This is your chat ID: `#{message.chat.id}`.",
        chat: message.chat.id
      )
    end
  end
end

#spam(*lines) ⇒ Object

Send the message (lines will be concatenated with a space between them) to the chats provided in the constructor and encapsulated.



92
93
94
95
96
# File 'lib/telepost.rb', line 92

def spam(*lines)
  @chats.each do |chat|
    post(chat, lines)
  end
end