Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import vk_api, json, time, datetime, psutil, os
- from vk_api.longpoll import VkLongPoll, VkEventType
- from time import sleep
- from os import system as execute
- from os import name as ostype
- from pprint import pprint
- from pathlib import Path
- # from pvblib import system as s
- # from pvblib import features as f
- class base:
- users = None
- api = None
- path = None
- class system:
- def editBalance(id, count, type):
- if type == 'add':
- oldbalance = system.getUserData(id)['ballance']
- newbalance = str(int(system.getUserData(id)['ballance']) + int(count))
- print('. old balance: ' + str(oldbalance))
- print('. new balance: ' + str(newbalance))
- system.editUser(id, 'ballance', newbalance)
- return (oldbalance, newbalance)
- elif type == 'get':
- oldbalance = system.getUserData(id)['ballance']
- newbalance = str(int(system.getUserData(id)['ballance']) - int(count))
- print('. old balance: ' + str(oldbalance))
- print('. new balance: ' + str(newbalance))
- system.editUser(id, 'ballance', newbalance)
- return (oldbalance, newbalance)
- elif type == 'set':
- oldbalance = system.getUserData(id)['ballance']
- print('. old balance: ' + str(oldbalance))
- print('. new balance: ' + str(count))
- system.editUser(id, 'ballance', count)
- return (oldbalance, count)
- def editUser(id, param, value):
- data = system.getUserData(id)
- data[param] = value
- file = open('users/' + str(id) + '.json', 'w')
- file.write(json.dumps(data))
- file.close()
- def removeUser(id):
- if id in base.users:
- userfile = Path('users/' + str(id) + '.json')
- if userfile.exists():
- os.remove('users/' + str(id) + '.json')
- file_a = open(base.path, 'r')
- list = str(file_a.read())
- file_a.close()
- list = list.replace(',' + str(id), '')
- file_b = open(base.path, 'w')
- file_b.write(list)
- file_b.close()
- return 1
- else:
- return 0
- else:
- return 2
- def createUserData(id, ballance, lvl, exp, account, reg, banned):
- try:
- file = open('users/' + str(id) + '.json')
- file.close()
- return False
- except:
- file = open('users/' + str(id) + '.json', 'w')
- value = '{"account": ' + str(account) + ','
- value += '"ballance": ' + str(ballance) + ','
- value += '"banned": ' + str(banned) + ','
- value += '"id": ' + '"' + str(id) + '"' + ','
- value += '"reg": "' + str(reg) + '"}'
- file.write(value)
- file.close()
- return True
- def getUserData(id):
- try:
- file = open('users/' + str(id) + '.json')
- data = file.read()
- file.close()
- return json.loads(data)
- except:
- return False
- def scanUsersList():
- file = open(base.path)
- value = file.read()
- file.close()
- value = value.split(',')
- base.users = value
- return value
- def appenedUsersList(userid):
- try:
- file = open(base.path, 'a')
- file.write(',' + userid)
- file.close()
- return True
- except:
- return False
- def messageReadState(id):
- return (base.api.messages.getById(message_ids=id, v='5.74')['items'][0]['read_state'])
- def getUserResponse(id, need, namecase = None):
- return base.api.users.get(user_ids=id, fields=need, name_case=namecase)[0]
- def setStatus(text):
- base.api.status.set(text=text)
- def sendCommandInformation(userid, command):
- userinfo = system.getUserResponse(userid, None, None)
- print("\n" + str(features.getTime()) + ' (' + str(userinfo['first_name']) + ' ' + str(userinfo['last_name']) + ', ' + str(userinfo['id']) + ') – ' + command)
- def getAccountType(account):
- if account == 0 or str(account) == '0':
- return 'Жилец'
- elif account == 1 or str(account) == '1':
- return 'Богач'
- elif account == 2 or str(account) == '2':
- return 'Основатель'
- def getAccountStatus(status):
- if status == 0:
- return 'Отсутствует'
- elif status == 1:
- return 'Заключён в карцер'
- elif status == 2:
- return 'Под присмотром основателя'
- def isUserBanned(id):
- data = system.getUserData(id)['banned']
- if data == 0 or str(data) == '0':
- return 0
- elif data == 1 or str(data) == '1':
- return 1
- elif data == 2 or str(data) == '2':
- return 2
- class features:
- def clearOutput():
- if ostype == 'nt':
- execute('cls')
- else:
- execute('clear')
- def getTime():
- return datetime.datetime.now().strftime("%d.%m.%y %H:%M:%S")
- def getRamLoad():
- py = psutil.Process(os.getpid())
- return str(round(py.memory_info()[0] / 1024 / 1024)) + ' мб (' + str(round(py.memory_percent())) + '%)'
- def getCpuLoad():
- py = psutil.Process(os.getpid())
- return str(round(py.cpu_percent())) + '%'
- def isFileExist(path):
- return Path(path).is_file()
- """ PURE BOT SYSTEM IS START HERE """
- def launcher():
- cmd = features
- bot = system
- cmd.clearOutput()
- # Информация о ПО
- pbVer, pbUpdate, pbBuildName, pbPlatform = '1.0', '19.11.2018', 'Whinter', 'Android 8.0'
- # Константы для ВК
- statusOnline, statusOffline = '💻 Online', '🖥 Offline'
- # Константы для сисиемы
- listpath = 'users/LIST.txt'
- base.path = listpath
- user_params = ('id', 'ballance', 'level', 'exp', 'account', 'reg', 'banned')
- startTime = None
- users = None
- quests = 0
- print("\n# . Авторизация")
- # Авторизация и генерация главного цикла
- login, password = '380984805793', '123qweasd'
- vkSession = vk_api.VkApi(login, password)
- try:
- vkSession.auth(token_only=True)
- except vk_api.AuthError:
- cmd.clearOutput()
- print('Authorization error')
- return
- print('# . Подключение к LongPoll')
- api = vkSession.get_api()
- base.api = api
- longpoll = VkLongPoll(vkSession)
- print("# . Установка статуса на страничке")
- bot.setStatus(statusOnline)
- print("# . Загрузка дополнительной информации")
- users = bot.scanUsersList()
- base.users = users
- print("# . Отправка сообщения об успешном запуске")
- api.messages.send(user_id=501620437, message='💻 Запуск системы прошёл успешно. Время начала работы - ' + cmd.getTime())
- startTime = cmd.getTime()
- cmd.clearOutput()
- for event in longpoll.listen():
- if event.type == VkEventType.MESSAGE_NEW and bot.messageReadState(event.message_id) == 0:
- messlist = str(event.text).split(' ')
- if event.from_user:
- #-----КОМАНДЫ-ДЛЯ-АДМИНИСТРАТОРОВ
- if event.text == 'pvb stop' and bot.getUserResponse(event.user_id, 'is_friend', None)['is_friend'] == 1:
- print("\nWork is stop wireless by administrator in " + cmd.getTime())
- bot.setStatus(statusOffline)
- api.messages.send(user_id=event.user_id, message='🖥 Успешно: Работа бота завершена. Время завершения работы - ' + cmd.getTime())
- return
- #--------------------------------
- elif event.text == 'pvb help' and bot.getUserResponse(event.user_id, 'is_friend', None)['is_friend'] == 1:
- bot.sendCommandInformation(event.user_id, event.text)
- quests += 1
- #--------------------------------
- mess = "📜 Список команд для администратора"
- mess += "\n▫ pvb stop - Выключение бота"
- mess += "\n▫ pvb status - Информация о работе бота"
- mess += "\n▫ pvb scanusr - Обновление списка зарегистрированных пользователей"
- mess += "\n▫ pvb userinfo <id> - Просмотр профиля пользователя"
- mess += "\n▫ pvb addusrl <id> - Добавление указанного ID в список зарегистрированных"
- mess += "\n▫ pvb addusrf <id ballance lvl exp account regdate banned> - Регистрация нового пользователя"
- mess += "\n▫ pvb deluser <id> - Полностью удаляет пользователя из системы"
- mess += "\n▫ pvb edituser <id> <param> <value> - Редактировать профильпользователя"
- mess += "\n▫ pvb isuser <id> - Проверить, зарегистрирован ли пользователь"
- mess += "\n▫ pvb balance <id> <todo> <count> - Изменить баланс пользователя"
- mess += "\n▫ pvb userslist - Вывести список пользователей"
- api.messages.send(user_id=event.user_id, message=mess)
- #--------------------------------
- elif event.text == 'pvb status' and bot.getUserResponse(event.user_id, 'is_friend', None)['is_friend'] == 1:
- bot.sendCommandInformation(event.user_id, event.text)
- quests += 1
- #--------------------------------
- api.messages.setActivity(user_id = event.user_id, type = 'typing')
- mess = '⚙ PVB - Чат бот для ВКонтакте. Информация о работе сервера'
- mess += "\n▫🔸 Платформа: " + pbPlatform
- mess += "\n▫🔸 Процессор: " + 'ARM Cortex-A53 @ 1.4 GHz x8'
- mess += "\n▫🔸 Оперативная память: " + '3072 мб.'
- mess += "\n▫🔸 Нагрузка (CPU): " + str(cmd.getCpuLoad())
- mess += "\n▫🔸 Нагрузка (RAM): " + str(cmd.getRamLoad())
- mess += "\n▫🔸 Время запуска: " + startTime
- mess += "\n▫🔸 Запросы за сессию: " + str(quests)
- mess += "\n▫🔸 Пользователей: " + str(len(users))
- mess += "\n▫🔸 Версия: " + pbVer + ' ' + pbBuildName + ' (от ' + pbUpdate + ')'
- api.messages.send(user_id=event.user_id, message=mess)
- #--------------------------------
- elif messlist[1] == 'userinfo' and bot.getUserResponse(event.user_id, 'is_friend', None)['is_friend'] == 1:
- bot.sendCommandInformation(event.user_id, event.text)
- quests += 1
- #--------------------------------
- if messlist[2] in users:
- try:
- userdata = bot.getUserData(messlist[2])
- response = bot.getUserResponse(messlist[2], '', '')
- mess = '📑 ' + str(response['first_name']) + ' ' + str(response['last_name']) + ' - ' + str(userdata['id'])
- mess += "\n⠀⠀🎫 Идентификатор: " + str(userdata['id'])
- mess += "\n⠀⠀📌 Дата регистрации: " + str(userdata['reg'])
- mess += "\n⠀⠀💰 Самоцветы: " + str(userdata['ballance'])
- mess += "\n⠀⠀🔮 Класс: " + str(bot.getAccountType(userdata['account']))
- mess += "\n⠀⠀💉 Амнистия: " + str(bot.getAccountStatus(userdata['banned']))
- api.messages.send(user_id=event.user_id, message=mess)
- except:
- api.messages.send(user_id=event.user_id, message='✖ [Ошибка] Во время выполнения команды возникли непредвиденные исключения (Outside Exc.)')
- else:
- api.messages.send(user_id=event.user_id, message='⚫ Выполнение команды не дало результата. Похоже данный пользователь не зарегистрирован в системе')
- #--------------------------------
- elif messlist[1] == 'addusrl' and bot.getUserResponse(event.user_id, 'is_friend', None)['is_friend'] == 1:
- bot.sendCommandInformation(event.user_id, event.text)
- quests += 1
- #--------------------------------
- if messlist[2] in users:
- api.messages.send(user_id=event.user_id, message='✖ [Ошибка] Выполнение команды прервано. Указанный ID уже находится в списке зарегистрированных')
- else:
- if bot.appenedUsersList(messlist[2]):
- api.messages.send(user_id=event.user_id, message='✔ [Успешно] Указанный ID успешно добавлен в список зарегистрирвоанных')
- else:
- api.messages.send(user_id=event.user_id, message='✖ [Ошибка] В процессе выполнения возникли непредвиденные исключения')
- #--------------------------------
- elif messlist[1] == 'addusrf' and bot.getUserResponse(event.user_id, 'is_friend', None)['is_friend'] == 1:
- bot.sendCommandInformation(event.user_id, event.text)
- quests += 1
- #--------------------------------
- if bot.createUserData(id=messlist[2], ballance=messlist[3], lvl=messlist[4], exp=messlist[5], account=messlist[6], reg=cmd.getTime(), banned=messlist[8]):
- if messlist[2] not in users:
- bot.appenedUsersList(messlist[2])
- users = bot.scanUsersList()
- api.messages.send(user_id=event.user_id, message='✔ [Успешно] По указанному ID создан новый конфигурационный файл')
- else:
- api.messages.send(user_id=event.user_id, message='✖ [Ошибка] Указанному ID уже присвоен конфигурационный файл')
- #--------------------------------
- elif event.text == 'pvb scanusr' and bot.getUserResponse(event.user_id, 'is_friend', None)['is_friend'] == 1:
- bot.sendCommandInformation(event.user_id, event.text)
- quests += 1
- #--------------------------------
- users = bot.scanUsersList()
- base.users = users
- api.messages.send(user_id=event.user_id, message='✔ [Успешно] Список зарегистрированных пользователей обновлён')
- #--------------------------------
- elif messlist[1] == 'deluser' and bot.getUserResponse(event.user_id, 'is_friend', None)['is_friend'] == 1:
- bot.sendCommandInformation(event.user_id, event.text)
- quests += 1
- #--------------------------------
- result = bot.removeUser(messlist[2])
- if result == 1:
- api.messages.send(user_id=event.user_id, message='✔ [Успешно] Пользователь ' + messlist[2] + ' удалён из системы')
- users = bot.scanUsersList()
- elif result == 0:
- api.messages.send(user_id=event.user_id, message='✖ [Ошибка] Не удалось найти файл по указанному ID')
- elif result == 2:
- api.messages.send(user_id=event.user_id, message='✖ [Ошибка] ID не находится в списке зарегистрированных')
- #--------------------------------
- elif messlist[1] == 'edituser' and bot.getUserResponse(event.user_id, 'is_friend', None)['is_friend'] == 1:
- bot.sendCommandInformation(event.user_id, event.text)
- quests += 1
- #--------------------------------
- if messlist[2] in users:
- oldparam = bot.getUserData(messlist[2])[messlist[3]]
- bot.editUser(messlist[2], messlist[3], messlist[4])
- api.messages.send(user_id=event.user_id, message='✔ [Успешно] Параметр ' + messlist[3] + ' изменён с ' + str(oldparam) + ' на ' + messlist[4])
- else:
- api.messages.send(user_id=event.user_id, message='✖ [Ошибка] Указаный пользователь не зарегистрирован в системе')
- #--------------------------------
- elif messlist[1] == 'isuser' and bot.getUserResponse(event.user_id, 'is_friend', None)['is_friend'] == 1:
- bot.sendCommandInformation(event.user_id, event.text)
- quests += 1
- #--------------------------------
- users = bot.scanUsersList()
- if messlist[2] in users:
- if cmd.isFileExist('users/' + str(messlist[2]) + '.json'):
- api.messages.send(user_id=event.user_id, message='✔ [Успешно] Пользователь зарегистрирован')
- else: api.messages.send(user_id=event.user_id, message='✔ [Успешно] Пользователь находится в списке зарегистрированных, но файл профиля отсутствует')
- else:
- if cmd.isFileExist('users/' + str(messlist[2]) + '.json'):
- api.messages.send(user_id=event.user_id, message='✔ [Успешно] Пользователя нет в списке зарегистрированных, но файл профиля присутствует')
- else: api.messages.send(user_id=event.user_id, message='✔ [Успешно] Пользователь не зарегистрирован')
- #--------------------------------
- elif messlist[1] == 'userslist' and bot.getUserResponse(event.user_id, 'is_friend', None)['is_friend'] == 1:
- bot.sendCommandInformation(event.user_id, event.text)
- quests += 1
- # --------------------------------
- i = 0
- userslist = ''
- while i <= len(users) - 1:
- resp = bot.getUserResponse(users[i], None, None)
- sleep(0.5)
- userslist += str(users[i]) + " - " + str(resp['first_name']) + " " + str(resp['last_name']) + "\n"
- i += 1
- api.messages.send(user_id=event.user_id, message="✔ [Успешно] Список пользователей: \n\n" + userslist)
- # --------------------------------
- elif messlist[1] == 'balance' and bot.getUserResponse(event.user_id, 'is_friend', None)['is_friend'] == 1:
- bot.sendCommandInformation(event.user_id, event.text)
- quests += 1
- # --------------------------------
- if messlist[2] in users:
- oldbalance = str(bot.getUserData(messlist[2])['ballance'])
- result = bot.editBalance(messlist[2], messlist[4], messlist[3])
- if messlist[3] == 'set':
- api.messages.send(user_id=event.user_id, message='✔ [Успешно] Баланс пользователя изменён с ' + str(result[0]) + ' на ' + str(result[1]))
- elif messlist[3] == 'get':
- api.messages.send(user_id=event.user_id, message='✔ [Успешно] Баланс пользователя изменён с ' + str(result[0]) + ' на ' + str(result[1]))
- elif messlist[3] == 'add':
- api.messages.send(user_id=event.user_id, message='✔ [Успешно] Баланс пользователя изменён с ' + str(result[0]) + ' на ' + str(result[1]))
- else:
- api.messages.send(user_id=event.user_id, message='✖ [Ошибка] Указаный пользователь не зарегистрирован в системе')
- # --------------------------------
- #-----КОМАНДЫ-ДЛЯ-ПОЛЬЗОВАТЕЛЕЙ
- elif event.text == 'Бот, помощь' and bot.isUserBanned(event.user_id) == 0:
- bot.sendCommandInformation(event.user_id, event.text)
- quests += 1
- #--------------------------------
- mess = "🗜 Leviafan4ik Lab. - Чат бот \n"
- mess += "\nСписок команд для пользователей"
- mess += "\n▪ Бот, профиль - Предоставление информации о вашем профиле, зарегистрированном в локальной системе робота"
- mess += "\n▪ Бот, магазин - Соответствующий команде, эллектронный сборник виртуальных товаров, доступных вам для покупки"
- mess += "\n▪ Бот, пополнение счёта - Перечень способов пополнения виртуального баланса"
- api.messages.send(user_id=event.user_id, message=mess)
- #--------------------------------
- launcher()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement