#!/usr/bin/env ruby require 'rubygems' require 'yaml' require 'telegram/bot' require 'pp' require_relative 'commands.rb' #conf = YAML.load(File.read("bot_config.yaml")) @conf = YAML.load_file("bot_config.yaml") @botname = @conf['botname'] token = @conf['token'] telnet = @conf['telnet'] admin = @conf['admin'] @auth_chat = @conf['authorized_chats'] @allowed_sources = @conf['allowed_sources'] # Sanity check errcount = 0 puts "Checking if environment is sane...\n\n" if token.nil? puts "No bot token defined in bot_config.yaml!\nTHIS IS REQUIRED! Bot initialization failed; exiting..." exit(1) end if @botname.nil? errcount += 1 puts "Error(#{errcount.to_s}): No bot name defined. This is superficial. We'll call him Bob.\n\n" @botname = "Bob" end if telnet.nil? errcount += 1 puts "Error(#{errcount.to_s}): No telnet information provided in bot_config.yaml.\nThis is required for nearly all Empyrion-related " + "functions.\nTHIS SHOULD BE ADDRESSED. Continuing. (some commands will return broken messages)\n\n" end if admin.nil? errcount += 1 puts "Error(#{errcount.to_s}): No admin Telegram IDs provided in bot_config.yaml.\nThis is required for many functions.\n" + "THIS SHOULD BE ADDRESSED. Continuing. (some commands will not be available)\n\n" admin = ["0"] end if @auth_chat.nil? errcount += 1 puts "Error(#{errcount.to_s}): No authorized Telegram group IDs provided in bot_config.yaml.\nThis is required for most Empyrion-related " + "functions.\nTHIS SHOULD BE ADDRESSED. Continuing. (some commands will not be available)\n\n" @auth_chat = ["0"] end puts "Errors found: #{errcount.to_s}\n\n" puts "Starting [#{@botname}]...\n\n" puts "Empyrion Host: #{telnet['host']}" puts "Empyrion Telnet Port: #{telnet['port']}" puts "Authorized administrator IDs: #{admin}" puts "Authorized chat IDs: #{@auth_chat}" puts "Bot token: #{token}\n\n\n\n" #def process_command_srvstart(message) # puts "Received command: srvstart" # reply = `./srvstart` #end # #def process_command_srvstop(message) # puts "Received command: srvstop" # reply = `./srvstop` #end def handle_message(message) #Format sender name if ! message.from.username.nil? message.from.username = "@" + message.from.username elsif ! message.from.first_name.nil? message.from.username = message.from.first_name end #Format command command = message.text.split(" ")[0].split("@")[0].downcase #Strip command from arguments and @tags #command = message.text reply = 'Empty String' #conf = YAML.load_file("bot_config.yaml") telnet = @conf['telnet'] adm = @conf['admin'] puts "Received command from #{message.from.username}: #{command}" case command when '/start' reply = "Introduction: I am #{@botname}, and I am here to make life easier for meatbag admins like you. Currently I can retrieve information " + "from an Empyrion server as well as kill the server process.\n\n" + "Commands available:\n/start (Shows this message)\n/srvstart (Probably won't work)\n/srvstop\n/status\n/whoami\n\n" + "Check again later to see if any new functions have been added." if ! message_from_admin?(message, adm) && ! is_chat_authorized?(message, @auth_chat) if message.from.id == message.chat.id reply = reply + "\n\nWARNING: I am not authorized to work you directly. My functionality is limited." else reply = reply + "\n\nWARNING: I am not authorized to participate with this group. My functionality is limited." end elsif message_from_admin?(message, adm) && ! is_chat_authorized?(message, @auth_chat) reply = reply + "\n\nWARNING: Although you are my master, I have not been authorized to participate in this group. My functionality is limited." end when '/srvstart' reply = process_command_srvstart(message, command, adm) when '/srvstop' reply = process_command_srvstop(message, command, adm) when '/status' reply = process_command_srvstatus(message, command, adm) #if is_chat_authorized?(message, @auth_chat) || message_from_admin?(message, adm) # reply = `./scripts/srvstatus #{telnet['host']} #{telnet['port']} #{telnet['pass']}` #else # reply = "Refusal: I am not authorized to provide this information here." #end when '/location', '/whereareyou' if message_from_admin?(message, adm) || is_chat_authorized?(message, @auth_chat) reply = "I am currently located at:\n\nHost: #{`head -n1 /etc/hostname`}ExtIP: #{`curl myip.contegix.com 2>/dev/null`}" else reply = "Refusal: I am not authorized to provide this information here." end when '/whoami', '/chatinfo' #reply = "Answer: You are a meatbag named #{message.from.username}\n\nUser ID: #{message.from.id}\n\nChat ID: #{message.chat.id}" reply = "User ID: #{message.from.id}\nChat ID: #{message.chat.id}" if command == '/whoami' reply = "Answer: You are a meatbag named #{message.from.username}\n\n" + reply end when '/pp', '/debug' pp message reply = "Confirmation: Message debug information sent to console." when '/dance' if is_chat_authorized?(message, @auth_chat) || message_from_admin?(message, adm) reply = "dance" else reply = "Refusal: I am not authorized to bust a move in this location." end when '/flex' if is_chat_authorized?(message, @auth_chat) || message_from_admin?(message, adm) reply = "flex" else reply = "Refusal: I am not authorized to bring the gun show to this location." end else reply = "Mockery: My name is #{message.from.username}, I am a meatbag, and I think #{command} is a valid command." end puts "Sending #{reply.inspect}\n\n" #puts "End of case" return reply end Telegram::Bot::Client.run(token) do |bot| bot.listen do |message| #pp message validation = validate_incoming_data(message) #puts "DEBUG: #{validation}" if validation reply = handle_message(message) if reply == "dance" || reply == "flex" bot.api.sendVideo(chat_id: message.chat.id, video: "https://img.skyfalltech.net/togra/#{reply}.gif") else bot.api.send_message(chat_id: message.chat.id, text: "#{reply}") end else puts "Received bad data! [#{message.chat.type}]" puts validation end end end