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-2019 Yegor Bugayenko

License

MIT

Defined Under Namespace

Classes: CantPost, Fake

Instance Attribute Summary collapse

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.



71
72
73
74
75
# File 'lib/telepost.rb', line 71

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

Instance Attribute Details

#clientObject (readonly)

To make it possible to get the client.



67
68
69
# File 'lib/telepost.rb', line 67

def client
  @client
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.



111
112
113
114
115
116
117
118
119
120
121
# File 'lib/telepost.rb', line 111

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.



79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
# File 'lib/telepost.rb', line 79

def run
  Telebot::Bot.new(@token).run do |chat, message|
    if block_given?
      yield(chat, message)
    elsif !chat.nil?
      id = message.chat.id
      if id.positive?
        post(
          message.chat.id,
          "This is your chat ID: `#{message.chat.id}`."
        )
      end
    end
  end
rescue Net::OpenTimeout
  retry
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.



100
101
102
103
104
# File 'lib/telepost.rb', line 100

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