Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #-*-codi
- print("Загрузка библиотек...")
- from twx.botapi import TelegramBot, InputFileInfo, InputFile
- import pickle
- import time
- import os
- adminId = 50976308
- def Token():
- with open("token", "rb") as f:
- result = pickle.load(f)
- return result
- bot = TelegramBot(Token())
- def SaveOffset():
- global offset
- with open("offset", "wb") as f:
- pickle.dump(offset, f)
- def LoadDB(cel):
- if cel == "offset":
- print("Загрузка offset")
- else:
- print("Загрузка списка пользователей...")
- try:
- with open(cel, "rb") as f:
- result = pickle.load(f)
- except Exception:
- file = open(cel, "wb")
- file.close()
- print("Файл не найден!")
- if cel == "offset":
- result = 0
- else:
- result = []
- except pickle.UnpicklingError:
- file = open(cel, "wb")
- file.close()
- print("Ошибка загрузки!")
- if cel == "offset":
- result = 0
- else:
- result = []
- else:
- print("Загрузка прошла успешно!")
- return result
- def LoadUserDB(user_id, cel):
- file_name = cel + str(user_id)
- try:
- with open(file_name, "rb") as f:
- result = pickle.load(f)
- except Exception:
- file = open(file_name, "wb")
- file.close()
- print("Файл не найден!")
- result = [0, 0]
- except pickle.UnpicklingError:
- file = open(file_name, "wb")
- file.close()
- print("Ошибка загрузки!")
- result = [0, 0]
- else:
- print("Загрузка прошла успешно!")
- return result
- def NewUserAdd(user_id, cell):
- userlist = LoadDB(cell)
- first_len = len(userlist)
- if len(userlist) == 0:
- userlist.append(user_id)
- elif len(userlist) == 1:
- if userlist[0] != user_id:
- userlist.append(user_id)
- else:
- for i in range(0,1): #не используется по назначению
- for j in range(0,len(userlist)-1):
- if userlist[j] == user_id:
- break
- userlist.append(user_id)
- if first_len != len(userlist):
- with open(cell, "wb") as f:
- pickle.dump(userlist, f)
- x = True
- print("Добавлен новый пользователь!")
- else: x = False
- return x
- def NewUserInfoAdd(user_id, first_name, last_name, username):
- user_info = { "first_name" : first_name, "last_name" : last_name, "username" : username}
- with open("info" + str(user_id), "wb") as f:
- pickle.dump(user_info, f)
- print("Информация о пользователе добавлена")
- def UserInfo(user_id):
- print("Загрузка информации пользователя...")
- try:
- with open("info" + str(user_id), "rb") as f:
- user_info = pickle.load(f)
- except Exception:
- print("Информация не найдена!")
- user_info = False
- except pickle.UnpicklingError:
- print("Загрузка информации не возможна!")
- user_info = False
- else:
- ("Загрузка прошла успешно!")
- return user_info
- def CheckId():
- while True:
- while True:
- user_id_in = input("Введите id: ")
- try:
- user_id = int(user_id_in)
- except Exception:
- print("Ошибка! Попробуй еще раз.")
- else: break
- userlist = LoadDB("users")
- print(userlist)
- if len(userlist) != 0:
- for j in userlist:
- if j == user_id:
- print("Информация найдена. Показать? \n'yes' или 'no'")
- ans = input(">>> ")
- if ans == "yes":
- user_info = UserInfo(user_id)
- if user_info != False: print(user_info)
- break
- else: print("База данных пуста!")
- print("Выполнить поиск еще раз? \n'yes' или 'no'")
- while True:
- ans2 = input(">>> ")
- if ans2 == "yes":
- break
- elif ans2 == "no":
- break
- if ans2 == "no":
- break
- def NewAchUserAdd(do):
- while True:
- user_id_in = input("Введите id: ")
- try:
- user_id = int(user_id_in)
- except Exception:
- print("Ошибка! Попробуй еще раз.")
- else:
- break
- if do == "add":
- NewUserAdd(user_id, "userAchOn")
- if do == "del":
- AchUserDel(user_id)
- def AchUserDel(user_id):
- userlist = LoadDB("userAchOn")
- try:
- userlist.remove(user_id)
- except Exception:
- result = "Ошибка! Не было включено!"
- else:
- with open("userAchOn", "wb") as f:
- pickle.dump(userlist, f)
- os.remove("AchMsg" + str(user_id))
- os.remove("AchSim" + str(user_id))
- result = "Отключено!"
- return result
- def MsgCheck(): # получение сообщений с сервера
- print("Обновление сообщений...")
- global offset
- updates = bot.get_updates(offset + 1, 13, 0).wait()
- for update in updates:
- offset = update[0]
- user_id = update[1][1][0]
- chat_id = update[1][3][0]
- msg = update[1][7]
- first_name = update[1][1][1]
- last_name = update[1][1][2]
- username = update[1][1][3]
- audio = update[1][8]
- photo = update[1][9]
- sticker = update[1][10]
- video = update[1][11]
- location = update[1][13]
- if audio != None:
- if PreAchievement(user_id, "userAchOn") == True:
- MediaAchievement("audioAch", user_id, chat_id, Name(first_name, last_name))
- elif photo != None:
- if PreAchievement(user_id, "userAchOn") == True:
- MediaAchievement("photoAch", user_id, chat_id, Name(first_name, last_name))
- elif sticker != None:
- if PreAchievement(user_id, "userAchOn") == True:
- MediaAchievement("stickerAch", user_id, chat_id, Name(first_name, last_name))
- elif video != None:
- if PreAchievement(user_id, "userAchOn") == True:
- MediaAchievement("videoAch", user_id, chat_id, Name(first_name, last_name))
- elif location != None:
- if PreAchievement(user_id, "userAchOn") == True:
- MediaAchievement("locationAch", user_id, chat_id, Name(first_name, last_name))
- if msg == "/help": bot.send_message(chat_id, Help("chat"))
- elif msg == "/ach_on":
- result = NewUserAdd(user_id, "userAchOn")
- if result == True: bot.send_message(chat_id, "Активировано!")
- if result == False: bot.send_message(chat_id, "Ошибка!")
- elif msg == "/ach_off": bot.send_message(chat_id, AchUserDel(user_id))
- elif msg == "/ach_stats": bot.send_message(chat_id, AchUserStats(user_id, "chat", Name(first_name, last_name))
- elif msg == "/my_id": bot.send_message(chat_id, "Твой id: " + str(user_id))
- if chat_id == user_id: #пользователь пишет в личку
- if NewUserAdd(user_id, "users") == True: NewUserInfoAdd(user_id, first_name, last_name, username)
- print_msg = str(user_id) + " | "
- print_msg += Name(first_name, last_name)
- print_msg += " | "
- if msg != None:
- print_msg += msg
- if PreAchievement(user_id) == True:
- Achievement(user_id, msg, chat_id, Name(first_name, last_name))
- print(print_msg)
- print("Сообщения обработаны!")
- SaveOffset()
- def AchUserStats(user_id, mode, name):
- if mode == "chat":
- check_res = PreAchievement(user_id)
- if check_res == False:
- result = "Ошибка! Надо активировать!"
- if check_res == True:
- user_msgs = LoadUserDB(user_id, "AchMsg") #число сообщений, последняя ачивка
- user_si = LoadUserDB(user_id, "AchSim") #число символов, последняя ачивка
- audio = LoadUserDB(user_id, "audioAch")
- photo = LoadUserDB(user_id, "photoAch")
- video = LoadUserDB(user_id, "videoAch")
- sticker = LoadUserDB(user_id, "stickerAch")
- location = LoadUserDB(user_id, "locationAch")
- result = "Отправлено (" + name +"): \n"
- result += (" " + str(user_msgs[1]) + " сообщений,\n")
- result += (" " + str(user_si[1]) + " символов,\n")
- result += (" " + str(audio[1]) + " аудио,\n")
- result += (" " + str(photo[1]) + " изображений,\n")
- result += (" " + str(video[1]) + " видео,\n")
- result += (" " + str(sticker[1] + " стикеров,\n")
- result += (" " + str(location[1]) + " местоположений.")
- return result
- def ShowOffset():
- global offset
- print(offset)
- def Help(mode):
- if mode == "console":
- result = """
- msgcheck - проверка сообщений
- automsgch - проверка сообщений опред. время [сек]
- checkid - проверка наличия id в БД
- showoffset - показ offset
- achion - включение 'ачивок' у пользователя
- achioff - отключение 'ачивок у пользователя
- achion userlist - список пользователей с включеными 'ачивками'
- userlist - список пользователей в БД
- exit - выход"""
- if mode == "chat":
- result = """
- /help - помощь
- /ach_on - включение 'ачивок'
- /ach_off - отключение 'ачивок'
- /ach_stats - статистика
- /my_id - показать id"""
- return result
- def UserAchievementSave(user_id, cel, x):
- file_name = cel + str(user_id)
- with open(file_name, "wb") as f:
- pickle.dump(x, f)
- print("Успешно сохранено!")
- def PreAchievement(user_id):
- userlist = LoadDB("userAchOn")
- if len(userlist) == 0:
- result = False
- if len(userlist) == 1:
- if userlist[0] == user_id:
- result = True
- else:
- result = False
- if len(userlist) > 1 :
- result = False
- for j in range(0, len(userlist) - 1):
- if userlist[j] == user_id:
- result = True
- break
- return result
- def Name(first_name, last_name):
- name = ""
- if first_name != None:
- name += first_name
- if last_name != None:
- name += " "
- name += last_name
- return name
- def Achievement(user_id, msg, chat_id, name):
- user_msgs = LoadUserDB(user_id, "AchMsg") #число сообщений, последняя ачивка
- user_si = LoadUserDB(user_id, "AchSim") #число символов, последняя ачивка
- user_msgs[0] += 1
- user_si[0] += len(msg)
- for j in range(1, 10000): #проверка и отправка ачивок "символов"
- if 1000*j > user_si[1]:
- if 1000*j <= user_si[0]:
- bot.send_message(chat_id, name + " набрал " + str(1000*j) + " символов!")
- user_si[1] = 1000*j
- break
- else: break
- for j in range(1, 2000):
- if 50*j > user_msgs[1]:
- if 50*j <= user_msgs[0]:
- bot.send_message(chat_id, name + " отправил " + str(50*j) + " сообщений!")
- user_msgs[1] = 50*j
- break
- else: break
- UserAchievementSave(user_id, "AchMsg", user_msgs)
- UserAchievementSave(user_id, "AchSim", user_si)
- def MediaAchievement(media, user_id, chat_id, name):
- user_stats = LoadUserDB(user_id, media)
- user_stats[0] += 1
- for j in range(1, 10000):
- if 50*j > user_stats[1]:
- if 50*j <= user_stats[0]:
- if media == "audioAch":
- thing = "аудио"
- if media == "photoAch":
- thing = "изображений"
- if media == "stickerAch":
- thing = "стикеров"
- if media == "videoAxh":
- thing = "видео"
- if media == "locationAch":
- thing = "местоположений"
- bot.send_message(chat_id, name + " отправил " + str(50*j) + " " + thing + "!")
- user_stats[1] = 50*j
- break
- def AutoMsgCheck(sec):
- start_time = time.clock()
- while True:
- try:
- MsgCheck()
- except Exception:
- print("Ошибка при обновлении!")
- if time.clock() - start_time >= sec:
- print("Обновление закончено!")
- break
- time.sleep(3)
- print("Загрузка прошла успешно!")
- offset = LoadDB("offset")
- while True:
- commInput = input(">>> ")
- if commInput == "msgcheck" :
- MsgCheck()
- elif commInput == "automsgch" : AutoMsgCheck(int(input("Время в секундах: ")))
- elif commInput == "help" : print(Help("console"))
- elif commInput == "checkid": CheckId()
- elif commInput == "showoffset": ShowOffset()
- elif commInput == "achion": NewAchUserAdd("add")
- elif commInput == "achioff": NewAchUserAdd("del")
- elif commInput == "achion userlist": print(LoadDB("userAchOn"))
- elif commInput == "userlist": print(LoadDB("users"))
- elif commInput == "exit" : break
- else: print("Команда не найдена!")
Advertisement
Add Comment
Please, Sign In to add comment