commit
f59219d559
@ -0,0 +1,2 @@
|
||||
/bot_config.yaml
|
||||
|
@ -0,0 +1,10 @@
|
||||
token: '<your-bot-token>'
|
||||
telnet:
|
||||
host: '<your empyrion host address>'
|
||||
port: '30004'
|
||||
pass: 'guest'
|
||||
admin:
|
||||
- 11111111
|
||||
authorized_chats:
|
||||
- 11111111
|
||||
|
@ -0,0 +1,71 @@
|
||||
def message_from_admin?(message, adm)
|
||||
#return @admin_userids.include? message.from.id.to_s
|
||||
#puts adm.class
|
||||
#puts message.from.id
|
||||
#puts adm
|
||||
if adm.include?(message.from.id)
|
||||
puts "Command is from an admin. [#{message.from.username}]"
|
||||
return true
|
||||
else
|
||||
puts "Command is NOT from an admin! [#{message.from.username}]"
|
||||
return false
|
||||
end
|
||||
end
|
||||
|
||||
def is_chat_authorized?(message, auth_chat)
|
||||
if auth_chat.include?(message.chat.id)
|
||||
puts "Group [#{message.chat.id}][#{message.chat.title}] is authorized"
|
||||
return true
|
||||
else
|
||||
puts "Group [#{message.chat.id}][#{message.chat.title}] is NOT authorized!"
|
||||
return false
|
||||
end
|
||||
end
|
||||
|
||||
def process_command_srvstart(message, command, adm)
|
||||
puts "Received command: srvstart"
|
||||
#pp message
|
||||
from_admin = message_from_admin?(message, adm)
|
||||
auth_grp = is_chat_authorized?(message, @auth_chat)
|
||||
if ! auth_grp && ! from_admin
|
||||
return "Refusal: I am not authorized to perform this function for this group, meatbag."
|
||||
elsif ! from_admin
|
||||
return "Refusal: The meatbag #{message.from.username} is not my master."
|
||||
elsif ! auth_grp
|
||||
return "Refusal: Although I respect your wishes, master, I am not authorized to perform this function for this group."
|
||||
else
|
||||
telnet = @conf['telnet']
|
||||
puts `./scripts/srvstart #{telnet['host']}`
|
||||
#return "Starting up the Empyrion service."
|
||||
return "This function is currently broken. An attempt was made, but odds are against the server having actually started.\n\n" +
|
||||
"Use /status for more info."
|
||||
end
|
||||
end
|
||||
|
||||
def process_command_srvstop(message, command, adm)
|
||||
puts "Received command: srvstop"
|
||||
from_admin = message_from_admin?(message, adm)
|
||||
auth_grp = is_chat_authorized?(message, @auth_chat)
|
||||
if ! auth_grp && ! from_admin
|
||||
return "Refusal: I am not authorized to perform this function for this group, meatbag."
|
||||
elsif ! from_admin
|
||||
return "Refusal: The meatbag #{message.from.username} is not my master."
|
||||
elsif ! auth_grp
|
||||
return "Refusal: Although I respect your wishes, master, I am not authorized to perform this function for this group."
|
||||
else
|
||||
telnet = @conf['telnet']
|
||||
`./scripts/srvstop #{telnet['host']} #{telnet['port']} #{telnet['pass']}`
|
||||
return "Affirmation: I am shutting down the Empyrion service."
|
||||
end
|
||||
end
|
||||
|
||||
def process_command_srvstatus(message, command, adm)
|
||||
if is_chat_authorized?(message, @auth_chat) || message_from_admin?(message, adm)
|
||||
telnet = @conf['telnet']
|
||||
reply = `./scripts/srvstatus #{telnet['host']} #{telnet['port']} #{telnet['pass']}`
|
||||
else
|
||||
reply = "Refusal: I am not authorized to provide this information here."
|
||||
end
|
||||
return reply
|
||||
end
|
||||
|
@ -0,0 +1,153 @@
|
||||
#!/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']
|
||||
|
||||
# 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
|
||||
|
||||
reply = 'Empty String'
|
||||
#conf = YAML.load_file("bot_config.yaml")
|
||||
telnet = @conf['telnet']
|
||||
adm = @conf['admin']
|
||||
#case message.text.split(" ")[0].split("@")[0].downcase #Strip command from arguments and @tags
|
||||
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: #{`echo $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|
|
||||
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
|
||||
end
|
||||
end
|
||||
|
@ -0,0 +1,16 @@
|
||||
#!/usr/bin/env sh
|
||||
#ssh ajohnson@tartarus srvstart.bat
|
||||
#ssh ajohnson@tartarus 'X:\server\alpha9\start-nova9.cmd'
|
||||
ssh ajohnson@tartarus '.\srvstart.bat'
|
||||
#echo "Yay you did it"
|
||||
|
||||
#set timeout 10
|
||||
#set host [lindex $argv 0]
|
||||
#
|
||||
#spawn ssh ajohnson@${host}
|
||||
#expect "Microsoft Windows"
|
||||
#send ".\\srvstart.bat\r"
|
||||
##expect "Logged in successfully"
|
||||
##send "saveandexit 0\r"
|
||||
#expect eof
|
||||
|
@ -0,0 +1,15 @@
|
||||
#!/usr/bin/expect
|
||||
#ssh ajohnson@tartarus srvstart.bat
|
||||
#ssh ajohnson@tartarus "X:\server\alpha9\start-nova9.cmd"
|
||||
#echo "Yay you did it"
|
||||
|
||||
set timeout 10
|
||||
set host [lindex $argv 0]
|
||||
|
||||
spawn ssh ajohnson@${host}
|
||||
expect "Microsoft Windows"
|
||||
send ".\\srvstart.bat\r"
|
||||
#expect "Logged in successfully"
|
||||
#send "saveandexit 0\r"
|
||||
expect eof
|
||||
|
@ -0,0 +1,18 @@
|
||||
#!/usr/bin/env sh
|
||||
|
||||
host=$1
|
||||
port=$2
|
||||
pass=$3
|
||||
|
||||
if nc -zvw3 $host $port 2>/dev/null; then
|
||||
./scripts/srvstatus.expect $host $port $pass > /tmp/.stat
|
||||
grep -B1 -A8 Empyrion\ dedicated\ server /tmp/.stat | egrep -v Playfield\|Game\ seed
|
||||
printf "\nOnline players:\n- - - - - - - - - - - - -"
|
||||
sed -n '/Global\ online/,/Global\ players/p' /tmp/.stat | awk -F\= '{print $3}' | sed 's/....$//'
|
||||
rm /tmp/.stat
|
||||
exit 0
|
||||
else
|
||||
printf "Server is DOWN!"
|
||||
exit 1
|
||||
fi
|
||||
|
@ -0,0 +1,14 @@
|
||||
#!/usr/bin/expect
|
||||
|
||||
set timeout 10
|
||||
set host [lindex $argv 0]
|
||||
set port [lindex $argv 1]
|
||||
set pass [lindex $argv 2]
|
||||
|
||||
spawn telnet $host $port
|
||||
expect "password:"
|
||||
send "$pass\r"
|
||||
expect "Logged in successfully"
|
||||
send "plys\r"
|
||||
expect eof
|
||||
|
@ -0,0 +1,29 @@
|
||||
#!/usr/bin/expect
|
||||
|
||||
set timeout 10
|
||||
set host [lindex $argv 0]
|
||||
set port [lindex $argv 1]
|
||||
set pass [lindex $argv 2]
|
||||
|
||||
spawn telnet $host $port
|
||||
expect "password:"
|
||||
send "$pass\r"
|
||||
expect "Logged in successfully"
|
||||
#send "say 'This is a test (shutdown command) (no, it is not actually shutting down, hence the test).'\r"
|
||||
send "saveandexit 0\r"
|
||||
expect eof
|
||||
|
||||
|
||||
##!/usr/bin/env sh
|
||||
#host=$1
|
||||
#port=$2
|
||||
#pass=$3
|
||||
#
|
||||
#telnet $host $port <<EOF
|
||||
#$pass
|
||||
#say 'This is a test.'
|
||||
#^]
|
||||
#EOF
|
||||
#
|
||||
#exit 0
|
||||
|
Loading…
Reference in new issue