Rada sering aya kaayaan nalika aksés ka server diperlukeun di dieu jeung ayeuna. Sanajan kitu, nyambungkeun ngaliwatan SSH teu salawasna cara nu pangmerenahna, sabab bisa jadi teu boga hiji klien SSH, alamat server, atawa kombinasi pamaké / sandi di leungeun. Tangtu boga
Janten kuring mutuskeun pikeun nerapkeun solusi anu sederhana tapi pikaresepeun. Nyaéta, pikeun nyerat bot Telegram anu, nalika diluncurkeun dina server sorangan, bakal ngalaksanakeun paréntah anu dikirim ka dinya sareng ngabalikeun hasilna. Sanggeus diajar
Kuring ngalaksanakeun proyék ieu dina Ubuntu 16.04, tapi pikeun ngajalankeun anu teu aya masalah dina distribusi anu sanés, kuring nyobian ngadamel sadayana sacara umum.
Pendaptaran bot
Ngadaptar bot anyar kalawan @BotFather. Urang kirimkeun manéhna /newbot
sarta salajengna dina téks. Kami peryogi token bot énggal sareng id anjeun (anjeun tiasa kéngingkeun, contona, tina
Persiapan Python
Pikeun ngajalankeun bot, urang bakal ngagunakeun perpustakaan telebot
(pip install pytelegrambotapi
). Ngagunakeun Perpustakaan subprocess
urang bakal ngaéksekusi paréntah dina server.
peluncuran bot
Jieun file bot.py dina server:
nano bot.py
Sareng lebetkeun kodeu kana éta:
from subprocess import check_output
import telebot
import time
bot = telebot.TeleBot("XXXXXXXXX:AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA")#токен бота
user_id = 0 #id вашего аккаунта
@bot.message_handler(content_types=["text"])
def main(message):
if (user_id == message.chat.id): #проверяем, что пишет именно владелец
comand = message.text #текст сообщения
try: #если команда невыполняемая - check_output выдаст exception
bot.send_message(message.chat.id, check_output(comand, shell = True))
except:
bot.send_message(message.chat.id, "Invalid input") #если команда некорректна
if __name__ == '__main__':
while True:
try:#добавляем try для бесперебойной работы
bot.polling(none_stop=True)#запуск бота
except:
time.sleep(10)#в случае падения
Kami ngagentos token bot di dinya sareng anu dikaluarkeun ku @BotFather, sareng user_id kalayan nilai id akun anjeun. Mariksa id pangguna diperyogikeun supados bot nyayogikeun aksés ka server anjeun ngan ukur anjeun. Fungsi check_output()
executes paréntah dibikeun tur mulih hasilna.
Tetep ngan ukur ngamimitian bot. Pikeun ngajalankeun prosés dina server, abdi resep ngagunakeun screen
(sudo apt-get install screen
):
screen -dmS ServerBot python3 bot.py
(dimana "ServerBot" mangrupikeun ID prosés)
Prosésna bakal otomatis dijalankeun di latar tukang. Hayu urang angkat ka dialog sareng bot sareng pariksa yén sadayana jalan sakumaha sakuduna:
Wilujeng! Bot ngalaksanakeun paréntah anu dikirim ka éta. Ayeuna, pikeun ngaksés server, anjeun ngan ukur kedah muka dialog sareng bot.
Pangulangan paréntah
Seringna, pikeun ngawas kaayaan server, anjeun kedah ngalaksanakeun paréntah anu sami. Ku alatan éta, palaksanaan repeating paréntah tanpa resending aranjeunna bakal pisan kaluar tempat.
Kami bakal nerapkeun éta nganggo tombol inline dina pesen:
from subprocess import check_output
import telebot
from telebot import types #Добавляем импорт кнопок
import time
bot = telebot.TeleBot("XXXXXXXXX:AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA")#Токен бота
user_id = 0 #id вашего аккаунта
@bot.message_handler(content_types=["text"])
def main(message):
if (user_id == message.chat.id): #проверяем, что пишет именно владелец
comand = message.text #текст сообщения
markup = types.InlineKeyboardMarkup() #создаем клавиатуру
button = types.InlineKeyboardButton(text="Повторить", callback_data=comand) #создаем кнопку
markup.add(button) #добавляем кнопку в клавиатуру
try: #если команда невыполняемая - check_output выдаст exception
bot.send_message(user_id, check_output(comand, shell = True, reply_markup = markup)) #вызываем команду и отправляем сообщение с результатом
except:
bot.send_message(user_id, "Invalid input") #если команда некорректна
@bot.callback_query_handler(func=lambda call: True)
def callback(call):
comand = call.data #считываем команду из поля кнопки data
try:#если команда не выполняемая - check_output выдаст exception
markup = types.InlineKeyboardMarkup() #создаем клавиатуру
button = types.InlineKeyboardButton(text="Повторить", callback_data=comand) #создаем кнопку и в data передаём команду
markup.add(button) #добавляем кнопку в клавиатуру
bot.send_message(user_id, check_output(comand, shell = True), reply_markup = markup) #вызываем команду и отправляем сообщение с результатом
except:
bot.send_message(user_id, "Invalid input") #если команда некорректна
if __name__ == '__main__':
while True:
try:#добавляем try для бесперебойной работы
bot.polling(none_stop=True)#запуск бота
except:
time.sleep(10)#в случае падения
Balikan deui bot:
killall python3
screen -dmS ServerBot python3 bot.py
Hayu urang pariksa deui yén sagalana jalan leres:
Ku mencét tombol dina suratna, bot kedah ngulang paréntah ti mana pesen ieu dikirim.
Gantina kacindekan
Tangtosna, metoda ieu henteu nyamar janten gaganti pikeun metode sambungan klasik, tapi ngamungkinkeun anjeun gancang terang ngeunaan kaayaan server sareng ngirim paréntah ka éta anu henteu meryogikeun kaluaran rumit.
sumber: www.habr.com