Guest User

bot yellow server

a guest
Jun 16th, 2017
26
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 7.55 KB | None | 0 0
  1. import logging
  2. import re
  3. from typing import Callable
  4. from database import Servidor, Dono, db, db_session
  5. from telebot import TeleBot, types
  6. from telebot.util import extract_arguments, is_command
  7. from telebot.apihelper import ApiException
  8. from utils import extract_auth_host, extract_ip
  9.  
  10. db.bind('sqlite', 'ehibot.sqlite3', create_db=True)
  11. db.generate_mapping(create_tables=True)
  12.  
  13. TOKEN = "339048941:AAFvc99VmZSSYSKhtj9HSVW6clKuVfliib4" # type: str
  14. bot = TeleBot(TOKEN)
  15.  
  16. servidoresSalvos = {} # type: dict
  17. LIMITE_DE_SERVIDORES = 5 # type: int
  18. LIMITE_DIAS_PADRAO = 2 # type: int
  19. USER_DATA = {} #type: dict
  20.  
  21. logger = logging.getLogger('servidor')
  22.  
  23. @bot.message_handler(commands=['novo', 'create'])
  24. def new_server(msg):
  25.     user_id = msg.from_user.id
  26.     auths = extract_arguments(msg.text)
  27.     auths = extract_auth_host(auths)
  28.    
  29.     if msg.chat.type != 'private':
  30.         bot.reply_to(msg, 'Para garantir a segurança do seu servidor, precisamos falar secretamente!')
  31.     elif exceed_limit_servers(user_id):
  32.         bot.send_message(msg.chat.id, 'Máximo de %d servidores.' %LIMITE_DE_SERVIDORES)
  33.     elif auths:
  34.         username, password, ip = auths['username'], auths['password'], auths['ip']
  35.         create_server(username, password, ip, user_id)
  36.         bot.send_message(msg.chat.id, 'Servidor criado com sucesso!')
  37.     else:
  38.         bot.send_message(msg.chat.id, 'Tente username:senha@ip')
  39.  
  40. def exceed_limit_servers(user_id: int) -> bool:
  41.     with db_session:
  42.         if LIMITE_DE_SERVIDORES <= Servidor.select(lambda s: s.dono.uid == user_id).count():
  43.             return True
  44.            
  45. def create_server(username: str, password: str, ip: str, user_id: int) -> None:
  46.     with db_session:
  47.          new_owner(user_id)
  48.          owner = Dono[user_id]
  49.          Servidor(
  50.              ip=ip,
  51.              userssh=username,
  52.              senha=password,
  53.              grupoid=user_id,
  54.              dono=owner,
  55.              limitedias=LIMITE_DIAS_PADRAO
  56.              )
  57.  
  58. def new_owner(user_id: int) -> None:
  59.     with db_session:
  60.         if not Dono.exists(uid=user_id):
  61.             Dono(uid=user_id)
  62.  
  63.  
  64. @bot.message_handler(regexp="^(/editar )[0-9]{1,4}$")
  65. def update_server(msg):
  66.     if msg.chat.type != 'private':
  67.         bot.reply_to(msg.chat.id, 'Precisamos conversar sozinhos para isso.')
  68.         return
  69.     user_id = msg.chat.id
  70.     server_id = extract_arguments(msg.text)
  71.     if not owner_exists(user_id):
  72.         bot.send_message(msg.chat.id, 'Você não possui um cadastro de dono.')
  73.     elif not server_have_owner(server_id, user_id):
  74.         bot.send_message(msg.chat.id, 'Servidor não encontrado!')
  75.     else:
  76.         markup = create_options_button_server(user_id, server_id)
  77.         bot.send_message(msg.chat.id, "Selecione uma opção:", reply_markup=markup)
  78.  
  79. def owner_exists(user_id: int) -> bool:
  80.     with db_session: return Dono.exists(uid=user_id)
  81.  
  82. def server_have_owner(server_id: int, user_id: int) -> bool:
  83.     with db_session:
  84.         return Servidor.exists(id=server_id, dono=Dono.get(uid=user_id))
  85.  
  86. def create_options_button_server(user_id: int, server_id: int) -> Callable[[list, str], types.InlineKeyboardMarkup]:
  87.     texts = ['🖥 IP', '👤 UserSSH', '🔑 Senha', '💬 Titulo', '🕐 LimiteDias', '✘ Cancelar']
  88.     data = str(server_id)
  89.     return create_inline_buttons(texts, data)
  90.    
  91. def create_inline_buttons(texts: list, data: str) -> types.InlineKeyboardMarkup:
  92.     markup = types.InlineKeyboardMarkup(row_width=2)
  93.     buttons = [] #do row_width work
  94.     for text in texts:
  95.         #ex. data: titulo15 (tituloID)
  96.         button = types.InlineKeyboardButton(text, callback_data=text.lower()[2:]+data)
  97.         buttons.append(button)
  98.     markup.add(*buttons)
  99.     return markup
  100.    
  101.    
  102. @bot.callback_query_handler(func=lambda call: call.data.startswith('cancelar'))
  103. def callback_inline_cancel(call):
  104.     delete_message(call.message.chat.id, call.message.message_id)
  105.    
  106. @bot.callback_query_handler(func=lambda call: call.data.startswith('ip'))
  107. def callback_inline_ip(call):
  108.     user_id = call.from_user.id
  109.     server_id = int(call.data.strip('ip'))
  110.     USER_DATA[user_id] = server_id
  111.    
  112.     bot.send_message(call.message.chat.id, "Envie o endereço IP")
  113.     delete_message(call.message.chat.id, call.message.message_id)
  114.     bot.register_next_step_handler(call.message, step_edit_server_ip)
  115.    
  116.    
  117. def step_edit_server_ip(message):
  118.     if is_command(message.text): return
  119.  
  120.     delete_message(message.chat.id, message.message_id - 1)
  121.     ip = extract_ip(message.text)
  122.     if not ip:
  123.         bot.send_message(message.chat.id, 'Endereço IP inválido, envie outro:')
  124.         bot.register_next_step_handler(message, step_edit_server_ip)
  125.         return
  126.    
  127.     server_id = USER_DATA[message.from_user.id]
  128.     with db_session:
  129.         server = Servidor[server_id]
  130.         server.ip = ip
  131.        
  132.     bot.send_message(message.chat.id, 'Endereço IP atualizado do servidor %d' %USER_DATA[message.from_user.id])
  133.     markup = create_options_button_server(message.from_user.id, USER_DATA[message.from_user.id])
  134.     bot.send_message(message.chat.id, "Selecione uma opção", reply_markup=markup)
  135.    
  136. def edit_message(text: str, chat_id: int, message_id: int, markup=None) -> bool:
  137.     try:
  138.         bot.edit_message_text(text, chat_id, message_id, reply_markup=markup)
  139.         return True
  140.     except ApiException:
  141.         return
  142.  
  143. def delete_message(chat_id: int, message_id: int) -> bool:
  144.     try:
  145.         bot.delete_message(chat_id, message_id)
  146.         return True
  147.     except ApiException:
  148.         return
  149.    
  150. @bot.message_handler(commands=['servidores'])
  151. def show_info_servers(msg):
  152.     user_id = msg.from_user.id
  153.     chat_id = msg.chat.id
  154.     banner = """
  155. 📝Titulo: {0}\n
  156. 🖥IP: {1}
  157. 🆔ID: {2}\n
  158. 👤Usuário: {3}
  159. 🔑Senha: {4}
  160. 🔘️Status: {5}
  161.    """
  162.  
  163.     with db_session:
  164.         for server in Servidor.select(lambda s: s.dono.uid == user_id)[:]:
  165.             titulo = server.titulo
  166.             ip = server.ip
  167.             idservidor = server.id
  168.             userssh = server.userssh
  169.             senha = '*****'
  170.             online = str(server.online).replace('False', 'offline').replace('True', 'online')
  171.            
  172.             bot.send_message(chat_id, banner.format(titulo, ip, idservidor, userssh, senha, online))
  173.        
  174. @bot.message_handler(commands=['start'])
  175. def welcome(msg):
  176.     message = """\
  177. Eu sou um bot que registra servidores
  178. no meu banco de dados para que depois
  179. você possa utilizar esse servidor em seu grupo
  180. atráves de comandos como /cadastrar etc...
  181. Para começar me envie as informações do seu host
  182. Exemplo: username:senha@ip
  183. Ficaria: alberto:senha123@179.242.73.20"""
  184.  
  185.  
  186. @bot.message_handler(commands=['ajuda', 'help'])
  187. def send_help(msg):
  188.     message = """<b>✅  Obrigatório</b>
  189. <b>Precisamos que você insira no seu servidor o
  190. usuário que você está nos passando no grupo sudo,
  191. para que seja possível cadastrar usuários no seu servidor</b>
  192.  
  193. <b>Tente:</b> <code>sudo usermod -aG sudo nomeuser</code>
  194.  
  195. <b>Caso falhe tente linha por linha abaixo:</b>
  196. <pre>su -
  197. apt-get install sudo
  198. nusermod -aG sudo nomeuser
  199. </pre>
  200. /atualizar - atualizar um servidor
  201. /novo - adicionar novo servidor
  202. /ajuda - imprime essa mensagem
  203. /servidores - servidores cadastrados
  204. """
  205.     bot.send_message(msg.chat.id, message, parse_mode='HTML')
  206.  
  207.  
  208. if __name__ == '__main__':
  209.     FORMAT=" %(funcName)s || %(message)s "
  210.     logging.basicConfig(level=logging.DEBUG, format=FORMAT)
  211.     print('Executando bot servidor..')
  212.     bot.skip_pending=True
  213.     bot.polling(none_stop=True)
Add Comment
Please, Sign In to add comment