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-2024 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.



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

def initialize(token, chats: [])
  @token = token
  @chats = chats
  @bot = Telegram::Bot::Client.new(@token)
end

Instance Attribute Details

#clientObject (readonly)

To make it possible to get the client.



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

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.



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

def post(chat, *lines)
  @bot.api.send_message(
    chat_id: chat,
    parse_mode: 'Markdown',
    disable_web_page_preview: true,
    text: lines.join(' ')
  )
end

#runObject

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



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

def run
  raise 'Block must be given' unless block_given?
  @bot.listen do |message|
    yield(message.chat.id, message.text)
  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.



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

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