Advertisement
Guest User

launcher.py

a guest
Nov 25th, 2018
175
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 23.35 KB | None | 0 0
  1. import vk_api, json, time, datetime, psutil, os
  2. from vk_api.longpoll import VkLongPoll, VkEventType
  3. from time import sleep
  4. from os import system as execute
  5. from os import name as ostype
  6. from pprint import pprint
  7. from pathlib import Path
  8.  
  9.  
  10. # from pvblib import system as s
  11. # from pvblib import features as f
  12.  
  13. class base:
  14.     users = None
  15.     api = None
  16.     path = None
  17.  
  18. class system:
  19.  
  20.     def editBalance(id, count, type):
  21.         if type == 'add':
  22.             oldbalance = system.getUserData(id)['ballance']
  23.             newbalance = str(int(system.getUserData(id)['ballance']) + int(count))
  24.             print('. old balance: ' + str(oldbalance))
  25.             print('. new balance: ' + str(newbalance))
  26.             system.editUser(id, 'ballance', newbalance)
  27.             return (oldbalance, newbalance)
  28.         elif type == 'get':
  29.             oldbalance = system.getUserData(id)['ballance']
  30.             newbalance = str(int(system.getUserData(id)['ballance']) - int(count))
  31.             print('. old balance: ' + str(oldbalance))
  32.             print('. new balance: ' + str(newbalance))
  33.             system.editUser(id, 'ballance', newbalance)
  34.             return (oldbalance, newbalance)
  35.         elif type == 'set':
  36.             oldbalance = system.getUserData(id)['ballance']
  37.             print('. old balance: ' + str(oldbalance))
  38.             print('. new balance: ' + str(count))
  39.             system.editUser(id, 'ballance', count)
  40.             return (oldbalance, count)
  41.  
  42.     def editUser(id, param, value):
  43.         data = system.getUserData(id)
  44.         data[param] = value
  45.         file = open('users/' + str(id) + '.json', 'w')
  46.         file.write(json.dumps(data))
  47.         file.close()
  48.  
  49.     def removeUser(id):
  50.         if id in base.users:
  51.             userfile = Path('users/' + str(id) + '.json')
  52.             if userfile.exists():
  53.                 os.remove('users/' + str(id) + '.json')
  54.                 file_a = open(base.path, 'r')
  55.                 list = str(file_a.read())
  56.                 file_a.close()
  57.                 list = list.replace(',' + str(id), '')
  58.                 file_b = open(base.path, 'w')
  59.                 file_b.write(list)
  60.                 file_b.close()
  61.                 return 1
  62.             else:
  63.                 return 0
  64.         else:
  65.             return 2
  66.  
  67.     def createUserData(id, ballance, lvl, exp, account, reg, banned):
  68.         try:
  69.             file = open('users/' + str(id) + '.json')
  70.             file.close()
  71.             return False
  72.         except:
  73.             file = open('users/' + str(id) + '.json', 'w')
  74.             value = '{"account": ' + str(account) + ','
  75.             value += '"ballance": ' + str(ballance) + ','
  76.             value += '"banned": ' + str(banned) + ','
  77.             value += '"id": ' + '"' + str(id) + '"' + ','
  78.             value += '"reg": "' + str(reg) + '"}'
  79.             file.write(value)
  80.             file.close()
  81.             return True
  82.  
  83.     def getUserData(id):
  84.         try:
  85.             file = open('users/' + str(id) + '.json')
  86.             data = file.read()
  87.             file.close()
  88.             return json.loads(data)
  89.         except:
  90.             return False
  91.  
  92.     def scanUsersList():
  93.         file = open(base.path)
  94.         value = file.read()
  95.         file.close()
  96.         value = value.split(',')
  97.         base.users = value
  98.         return value
  99.  
  100.     def appenedUsersList(userid):
  101.         try:
  102.             file = open(base.path, 'a')
  103.             file.write(',' + userid)
  104.             file.close()
  105.             return True
  106.         except:
  107.             return False
  108.  
  109.     def messageReadState(id):
  110.         return (base.api.messages.getById(message_ids=id, v='5.74')['items'][0]['read_state'])
  111.  
  112.     def getUserResponse(id, need, namecase = None):
  113.         return base.api.users.get(user_ids=id, fields=need, name_case=namecase)[0]
  114.  
  115.     def setStatus(text):
  116.         base.api.status.set(text=text)
  117.  
  118.     def sendCommandInformation(userid, command):
  119.         userinfo = system.getUserResponse(userid, None, None)
  120.         print("\n" + str(features.getTime()) + ' (' + str(userinfo['first_name']) + ' ' + str(userinfo['last_name']) + ', ' + str(userinfo['id']) + ') – ' + command)
  121.  
  122.     def getAccountType(account):
  123.         if account == 0 or str(account) == '0':
  124.             return 'Жилец'
  125.         elif account == 1 or str(account) == '1':
  126.             return 'Богач'
  127.         elif account == 2 or str(account) == '2':
  128.             return 'Основатель'
  129.            
  130.     def getAccountStatus(status):
  131.         if status == 0:
  132.             return 'Отсутствует'
  133.         elif status == 1:
  134.             return 'Заключён в карцер'
  135.         elif status == 2:
  136.             return 'Под присмотром основателя'
  137.    
  138.     def isUserBanned(id):
  139.         data = system.getUserData(id)['banned']
  140.         if data == 0 or str(data) == '0':
  141.             return 0
  142.         elif data == 1 or str(data) == '1':
  143.             return 1
  144.         elif data == 2 or str(data) == '2':
  145.             return 2
  146.  
  147.  
  148. class features:
  149.  
  150.     def clearOutput():
  151.         if ostype == 'nt':
  152.             execute('cls')
  153.         else:
  154.             execute('clear')
  155.  
  156.     def getTime():
  157.         return datetime.datetime.now().strftime("%d.%m.%y %H:%M:%S")
  158.  
  159.     def getRamLoad():
  160.         py = psutil.Process(os.getpid())
  161.         return str(round(py.memory_info()[0] / 1024 / 1024)) + ' мб (' + str(round(py.memory_percent())) + '%)'
  162.  
  163.     def getCpuLoad():
  164.         py = psutil.Process(os.getpid())
  165.         return str(round(py.cpu_percent())) + '%'
  166.        
  167.     def isFileExist(path):
  168.         return Path(path).is_file()
  169.  
  170.  
  171. """ PURE BOT SYSTEM IS START HERE """
  172.  
  173.  
  174. def launcher():
  175.     cmd = features
  176.     bot = system
  177.  
  178.     cmd.clearOutput()
  179.  
  180.     # Информация о ПО
  181.     pbVer, pbUpdate, pbBuildName, pbPlatform = '1.0', '19.11.2018', 'Whinter', 'Android 8.0'
  182.     # Константы для ВК
  183.     statusOnline, statusOffline = '💻 Online', '🖥 Offline'
  184.     # Константы для сисиемы
  185.     listpath = 'users/LIST.txt'
  186.     base.path = listpath
  187.     user_params = ('id', 'ballance', 'level', 'exp', 'account', 'reg', 'banned')
  188.     startTime = None
  189.     users = None
  190.     quests = 0
  191.  
  192.     print("\n# . Авторизация")
  193.  
  194.     # Авторизация и генерация главного цикла
  195.     login, password = '380984805793', '123qweasd'
  196.     vkSession = vk_api.VkApi(login, password)
  197.  
  198.     try:
  199.         vkSession.auth(token_only=True)
  200.     except vk_api.AuthError:
  201.         cmd.clearOutput()
  202.         print('Authorization error')
  203.         return
  204.  
  205.     print('# . Подключение к LongPoll')
  206.  
  207.     api = vkSession.get_api()
  208.     base.api = api
  209.     longpoll = VkLongPoll(vkSession)
  210.  
  211.     print("# . Установка статуса на страничке")
  212.     bot.setStatus(statusOnline)
  213.  
  214.     print("# . Загрузка дополнительной информации")
  215.     users = bot.scanUsersList()
  216.     base.users = users
  217.  
  218.     print("# . Отправка сообщения об успешном запуске")
  219.     api.messages.send(user_id=501620437, message='💻 Запуск системы прошёл успешно. Время начала работы - ' + cmd.getTime())
  220.     startTime = cmd.getTime()
  221.  
  222.     cmd.clearOutput()
  223.  
  224.     for event in longpoll.listen():
  225.         if event.type == VkEventType.MESSAGE_NEW and bot.messageReadState(event.message_id) == 0:
  226.             messlist = str(event.text).split(' ')
  227.             if event.from_user:
  228.  
  229.                 #-----КОМАНДЫ-ДЛЯ-АДМИНИСТРАТОРОВ
  230.                
  231.                 if event.text == 'pvb stop' and bot.getUserResponse(event.user_id, 'is_friend', None)['is_friend'] == 1:
  232.                     print("\nWork is stop wireless by administrator in " + cmd.getTime())
  233.                     bot.setStatus(statusOffline)
  234.                     api.messages.send(user_id=event.user_id, message='🖥 Успешно: Работа бота завершена. Время завершения работы - ' + cmd.getTime())
  235.                     return
  236.                     #--------------------------------
  237.                    
  238.                 elif event.text == 'pvb help' and bot.getUserResponse(event.user_id, 'is_friend', None)['is_friend'] == 1:
  239.                     bot.sendCommandInformation(event.user_id, event.text)
  240.                     quests += 1
  241.                     #--------------------------------
  242.                     mess = "📜 Список команд для администратора"
  243.                     mess += "\n▫ pvb stop - Выключение бота"
  244.                     mess += "\n▫ pvb status - Информация о работе бота"
  245.                     mess += "\n▫ pvb scanusr - Обновление списка зарегистрированных пользователей"
  246.                     mess += "\n▫ pvb userinfo <id> - Просмотр профиля пользователя"
  247.                     mess += "\n▫ pvb addusrl <id> - Добавление указанного ID в список зарегистрированных"
  248.                     mess += "\n▫ pvb addusrf <id ballance lvl exp account regdate banned> - Регистрация нового пользователя"
  249.                     mess += "\n▫ pvb deluser <id> - Полностью удаляет пользователя из системы"
  250.                     mess += "\n▫ pvb edituser <id> <param> <value> - Редактировать профильпользователя"
  251.                     mess += "\n▫ pvb isuser <id> - Проверить, зарегистрирован ли пользователь"
  252.                     mess += "\n▫ pvb balance <id> <todo> <count> - Изменить баланс пользователя"
  253.                     mess += "\n▫ pvb userslist - Вывести список пользователей"
  254.                     api.messages.send(user_id=event.user_id, message=mess)
  255.                     #--------------------------------
  256.                    
  257.                 elif event.text == 'pvb status' and bot.getUserResponse(event.user_id, 'is_friend', None)['is_friend'] == 1:
  258.                     bot.sendCommandInformation(event.user_id, event.text)
  259.                     quests += 1
  260.                     #--------------------------------
  261.                     api.messages.setActivity(user_id = event.user_id, type = 'typing')
  262.                     mess = '⚙ PVB - Чат бот для ВКонтакте. Информация о работе сервера'
  263.                     mess += "\n▫🔸 Платформа: " + pbPlatform
  264.                     mess += "\n▫🔸 Процессор: " + 'ARM Cortex-A53 @ 1.4 GHz x8'
  265.                     mess += "\n▫🔸 Оперативная память: " + '3072 мб.'
  266.                     mess += "\n▫🔸 Нагрузка (CPU): " + str(cmd.getCpuLoad())
  267.                     mess += "\n▫🔸 Нагрузка (RAM): " + str(cmd.getRamLoad())
  268.                     mess += "\n▫🔸 Время запуска: " + startTime
  269.                     mess += "\n▫🔸 Запросы за сессию: " + str(quests)
  270.                     mess += "\n▫🔸 Пользователей: " + str(len(users))
  271.                     mess += "\n▫🔸 Версия: " + pbVer + ' ' + pbBuildName + ' (от ' + pbUpdate + ')'
  272.                     api.messages.send(user_id=event.user_id, message=mess)
  273.                     #--------------------------------
  274.                    
  275.                 elif messlist[1] == 'userinfo' and bot.getUserResponse(event.user_id, 'is_friend', None)['is_friend'] == 1:
  276.                     bot.sendCommandInformation(event.user_id, event.text)
  277.                     quests += 1
  278.                     #--------------------------------
  279.                     if messlist[2] in users:
  280.                         try:
  281.                             userdata = bot.getUserData(messlist[2])
  282.                             response = bot.getUserResponse(messlist[2], '', '')
  283.                             mess = '📑 ' + str(response['first_name']) + ' ' + str(response['last_name']) + ' - ' + str(userdata['id'])
  284.                             mess += "\n⠀⠀🎫 Идентификатор: " + str(userdata['id'])
  285.                             mess += "\n⠀⠀📌 Дата регистрации: " + str(userdata['reg'])
  286.                             mess += "\n⠀⠀💰 Самоцветы: " + str(userdata['ballance'])
  287.                             mess += "\n⠀⠀🔮 Класс: " + str(bot.getAccountType(userdata['account']))
  288.                             mess += "\n⠀⠀💉 Амнистия: " + str(bot.getAccountStatus(userdata['banned']))
  289.                             api.messages.send(user_id=event.user_id, message=mess)
  290.                         except:
  291.                             api.messages.send(user_id=event.user_id, message='✖ [Ошибка] Во время выполнения команды возникли непредвиденные исключения (Outside Exc.)')
  292.                     else:
  293.                         api.messages.send(user_id=event.user_id, message='⚫ Выполнение команды не дало результата. Похоже данный пользователь не зарегистрирован в системе')
  294.                     #--------------------------------
  295.                    
  296.                 elif messlist[1] == 'addusrl' and bot.getUserResponse(event.user_id, 'is_friend', None)['is_friend'] == 1:
  297.                     bot.sendCommandInformation(event.user_id, event.text)
  298.                     quests += 1
  299.                     #--------------------------------
  300.                     if messlist[2] in users:
  301.                         api.messages.send(user_id=event.user_id, message='✖ [Ошибка] Выполнение команды прервано. Указанный ID уже находится в списке зарегистрированных')
  302.                     else:
  303.                         if bot.appenedUsersList(messlist[2]):
  304.                             api.messages.send(user_id=event.user_id, message='✔ [Успешно] Указанный ID успешно добавлен в список зарегистрирвоанных')
  305.                         else:
  306.                             api.messages.send(user_id=event.user_id, message='✖ [Ошибка] В процессе выполнения возникли непредвиденные исключения')
  307.                     #--------------------------------
  308.                    
  309.                 elif messlist[1] == 'addusrf' and bot.getUserResponse(event.user_id, 'is_friend', None)['is_friend'] == 1:
  310.                     bot.sendCommandInformation(event.user_id, event.text)
  311.                     quests += 1
  312.                     #--------------------------------
  313.                     if bot.createUserData(id=messlist[2], ballance=messlist[3], lvl=messlist[4], exp=messlist[5], account=messlist[6], reg=cmd.getTime(), banned=messlist[8]):
  314.                         if messlist[2] not in users:
  315.                             bot.appenedUsersList(messlist[2])
  316.                             users = bot.scanUsersList()
  317.                         api.messages.send(user_id=event.user_id, message='✔ [Успешно] По указанному ID создан новый конфигурационный файл')
  318.                     else:
  319.                         api.messages.send(user_id=event.user_id, message='✖ [Ошибка] Указанному ID уже присвоен конфигурационный файл')
  320.                     #--------------------------------
  321.                    
  322.                 elif event.text == 'pvb scanusr' and bot.getUserResponse(event.user_id, 'is_friend', None)['is_friend'] == 1:
  323.                     bot.sendCommandInformation(event.user_id, event.text)
  324.                     quests += 1
  325.                     #--------------------------------
  326.                     users = bot.scanUsersList()
  327.                     base.users = users
  328.                     api.messages.send(user_id=event.user_id, message='✔ [Успешно] Список зарегистрированных пользователей обновлён')
  329.                     #--------------------------------
  330.                    
  331.                 elif messlist[1] == 'deluser' and bot.getUserResponse(event.user_id, 'is_friend', None)['is_friend'] == 1:
  332.                     bot.sendCommandInformation(event.user_id, event.text)
  333.                     quests += 1
  334.                     #--------------------------------
  335.                     result = bot.removeUser(messlist[2])
  336.                     if result == 1:
  337.                         api.messages.send(user_id=event.user_id, message='✔ [Успешно] Пользователь ' + messlist[2] + ' удалён из системы')
  338.                         users = bot.scanUsersList()
  339.                     elif result == 0:
  340.                         api.messages.send(user_id=event.user_id, message='✖ [Ошибка] Не удалось найти файл по указанному ID')
  341.                     elif result == 2:
  342.                         api.messages.send(user_id=event.user_id, message='✖ [Ошибка] ID не находится в списке зарегистрированных')
  343.                     #--------------------------------
  344.                    
  345.                 elif messlist[1] == 'edituser' and bot.getUserResponse(event.user_id, 'is_friend', None)['is_friend'] == 1:
  346.                     bot.sendCommandInformation(event.user_id, event.text)
  347.                     quests += 1
  348.                     #--------------------------------
  349.                     if messlist[2] in users:
  350.                         oldparam = bot.getUserData(messlist[2])[messlist[3]]
  351.                         bot.editUser(messlist[2], messlist[3], messlist[4])
  352.                         api.messages.send(user_id=event.user_id, message='✔ [Успешно] Параметр ' + messlist[3] + ' изменён с ' + str(oldparam) + ' на ' + messlist[4])
  353.                     else:
  354.                         api.messages.send(user_id=event.user_id, message='✖ [Ошибка] Указаный пользователь не зарегистрирован в системе')
  355.                     #--------------------------------
  356.                    
  357.                 elif messlist[1] == 'isuser' and bot.getUserResponse(event.user_id, 'is_friend', None)['is_friend'] == 1:
  358.                     bot.sendCommandInformation(event.user_id, event.text)
  359.                     quests += 1
  360.                     #--------------------------------
  361.                     users = bot.scanUsersList()
  362.                     if messlist[2] in users:
  363.                         if cmd.isFileExist('users/' + str(messlist[2]) + '.json'):
  364.                             api.messages.send(user_id=event.user_id, message='✔ [Успешно] Пользователь зарегистрирован')
  365.                         else: api.messages.send(user_id=event.user_id, message='✔ [Успешно] Пользователь находится в списке зарегистрированных, но файл профиля отсутствует')
  366.                     else:
  367.                         if cmd.isFileExist('users/' + str(messlist[2]) + '.json'):
  368.                             api.messages.send(user_id=event.user_id, message='✔ [Успешно] Пользователя нет в списке зарегистрированных, но файл профиля присутствует')
  369.                         else: api.messages.send(user_id=event.user_id, message='✔ [Успешно] Пользователь не зарегистрирован')
  370.                     #--------------------------------
  371.  
  372.                 elif messlist[1] == 'userslist' and bot.getUserResponse(event.user_id, 'is_friend', None)['is_friend'] == 1:
  373.                     bot.sendCommandInformation(event.user_id, event.text)
  374.                     quests += 1
  375.                     # --------------------------------
  376.                     i = 0
  377.                     userslist = ''
  378.                     while i <= len(users) - 1:
  379.                         resp = bot.getUserResponse(users[i], None, None)
  380.                         sleep(0.5)
  381.                         userslist += str(users[i]) + " - " + str(resp['first_name']) + " " + str(resp['last_name']) + "\n"
  382.                         i += 1
  383.                     api.messages.send(user_id=event.user_id, message="✔ [Успешно] Список пользователей: \n\n" + userslist)
  384.                     # --------------------------------
  385.  
  386.                 elif messlist[1] == 'balance' and bot.getUserResponse(event.user_id, 'is_friend', None)['is_friend'] == 1:
  387.                     bot.sendCommandInformation(event.user_id, event.text)
  388.                     quests += 1
  389.                     # --------------------------------
  390.                     if messlist[2] in users:
  391.                         oldbalance = str(bot.getUserData(messlist[2])['ballance'])
  392.                         result = bot.editBalance(messlist[2], messlist[4], messlist[3])
  393.                         if messlist[3] == 'set':
  394.                             api.messages.send(user_id=event.user_id, message='✔ [Успешно] Баланс пользователя изменён с ' + str(result[0]) + ' на ' + str(result[1]))
  395.                         elif messlist[3] == 'get':
  396.                             api.messages.send(user_id=event.user_id, message='✔ [Успешно] Баланс пользователя изменён с ' + str(result[0]) + ' на ' + str(result[1]))
  397.                         elif messlist[3] == 'add':
  398.                             api.messages.send(user_id=event.user_id, message='✔ [Успешно] Баланс пользователя изменён с ' + str(result[0]) + ' на ' + str(result[1]))
  399.  
  400.                     else:
  401.                         api.messages.send(user_id=event.user_id, message='✖ [Ошибка] Указаный пользователь не зарегистрирован в системе')
  402.                     # --------------------------------
  403.                    
  404.                 #-----КОМАНДЫ-ДЛЯ-ПОЛЬЗОВАТЕЛЕЙ
  405.                
  406.                 elif event.text == 'Бот, помощь' and bot.isUserBanned(event.user_id) == 0:
  407.                     bot.sendCommandInformation(event.user_id, event.text)
  408.                     quests += 1
  409.                     #--------------------------------
  410.                     mess = "🗜 Leviafan4ik Lab. - Чат бот \n"
  411.                     mess += "\nСписок команд для пользователей"
  412.                     mess += "\n▪ Бот, профиль - Предоставление информации о вашем профиле, зарегистрированном в локальной системе робота"
  413.                     mess += "\n▪ Бот, магазин - Соответствующий команде, эллектронный сборник виртуальных товаров, доступных вам для покупки"
  414.                     mess += "\n▪ Бот, пополнение счёта - Перечень способов пополнения виртуального баланса"
  415.                     api.messages.send(user_id=event.user_id, message=mess)
  416.                     #--------------------------------
  417.  
  418.  
  419. launcher()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement