சேவையகத்திற்கான அணுகல் இங்கே மற்றும் இப்போது தேவைப்படும்போது அடிக்கடி சூழ்நிலைகள் உள்ளன. இருப்பினும், SSH வழியாக இணைப்பது எப்போதும் மிகவும் வசதியான முறையாக இருக்காது, ஏனெனில் உங்களிடம் SSH கிளையன்ட், சர்வர் முகவரி அல்லது பயனர்/கடவுச்சொல் சேர்க்கை இல்லாமல் இருக்கலாம். நிச்சயமாக உண்டு
எனவே ஒரு எளிய ஆனால் சுவாரஸ்யமான தீர்வை செயல்படுத்த முடிவு செய்தேன். அதாவது, டெலிகிராம் போட் ஒன்றை எழுதுங்கள், அது சர்வரிலேயே தொடங்கப்படும்போது, அதற்கு அனுப்பப்பட்ட கட்டளைகளை இயக்கி, முடிவைத் தரும். படித்தது
இந்த திட்டத்தை உபுண்டு 16.04 இல் செயல்படுத்தினேன், ஆனால் மற்ற விநியோகங்களில் சிக்கல் இல்லாத துவக்கத்திற்காக எல்லாவற்றையும் பொதுவான முறையில் செய்ய முயற்சித்தேன்.
பாட் பதிவு
@BotFather உடன் ஒரு புதிய போட் பதிவு. அவருக்கு அனுப்புகிறோம் /newbot
மேலும் உரையில். புதிய போட் மற்றும் உங்கள் ஐடிக்கு எங்களுக்கு ஒரு டோக்கன் தேவைப்படும் (உதாரணமாக, நீங்கள் அதை பெறலாம்
பைதான் தயாரிப்பு
போட்டைத் தொடங்க நூலகத்தைப் பயன்படுத்துவோம் telebot
(pip install pytelegrambotapi
) நூலகத்தைப் பயன்படுத்துதல் subprocess
சேவையகத்தில் கட்டளைகளை இயக்குவோம்.
ஒரு போட் இயங்குகிறது
சர்வரில் நாம் bot.py கோப்பை உருவாக்குகிறோம்:
nano bot.py
குறியீட்டை அதில் ஒட்டவும்:
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)#в случае падения
அதில் உள்ள போட் டோக்கனை @BotFather வழங்கியதையும், user_id ஐ உங்கள் கணக்கின் ஐடி மதிப்பையும் மாற்றுகிறோம். பயனர் ஐடியைச் சரிபார்ப்பது அவசியம், இதனால் போட் உங்கள் சேவையகத்திற்கான அணுகலை உங்களுக்கு மட்டுமே வழங்குகிறது. செயல்பாடு check_output()
அனுப்பிய கட்டளையை இயக்கி முடிவைத் தருகிறது.
போட் தொடங்குவது மட்டுமே எஞ்சியுள்ளது. சேவையகத்தில் செயல்முறைகளை இயக்க நான் பயன்படுத்த விரும்புகிறேன் screen
(sudo apt-get install screen
):
screen -dmS ServerBot python3 bot.py
(இங்கு "ServerBot" என்பது செயல்முறை ஐடி)
செயல்முறை தானாகவே பின்னணியில் தொடங்கும். போட் உடன் உரையாடலுக்குச் சென்று, எல்லாம் சரியாகச் செயல்படுகிறதா என்பதைச் சரிபார்க்கவும்:
வாழ்த்துகள்! போட் தனக்கு அனுப்பப்பட்ட கட்டளைகளை செயல்படுத்துகிறது. இப்போது, சர்வரை அணுக, போட் உடன் உரையாடலைத் திறக்க வேண்டும்.
மீண்டும் மீண்டும் கட்டளைகள்
பெரும்பாலும், சேவையகத்தின் நிலையை கண்காணிக்க, நீங்கள் அதே கட்டளைகளை இயக்க வேண்டும். எனவே, மீண்டும் மீண்டும் கட்டளைகளை அனுப்பாமல் செயல்படுத்துவது மிகவும் பொருத்தமானதாக இருக்கும்.
செய்திகளின் கீழ் உள்ள இன்லைன் பொத்தான்களைப் பயன்படுத்தி அதை செயல்படுத்துவோம்:
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)#в случае падения
போட்டை மீண்டும் துவக்கவும்:
killall python3
screen -dmS ServerBot python3 bot.py
எல்லாம் சரியாக வேலை செய்கிறதா என்பதை மீண்டும் சரிபார்க்கவும்:
செய்தியின் கீழ் உள்ள பொத்தானைக் கிளிக் செய்தால், செய்தி அனுப்பப்பட்ட கட்டளையை போட் மீண்டும் செய்ய வேண்டும்.
அதற்கு பதிலாக, ஒரு முடிவுக்கும்
நிச்சயமாக, இந்த முறை கிளாசிக்கல் இணைப்பு முறைகளுக்கு மாற்றாக பாசாங்கு செய்யவில்லை, இருப்பினும், இது சேவையகத்தின் நிலையைப் பற்றி விரைவாகக் கண்டறியவும், சிக்கலான வெளியீடு தேவையில்லாத கட்டளைகளை அனுப்பவும் உங்களை அனுமதிக்கிறது.
ஆதாரம்: www.habr.com