fork download
  1. #-*-codi
  2. print("Загрузка библиотек...")
  3.  
  4. from twx.botapi import TelegramBot, InputFileInfo, InputFile
  5. import pickle
  6. import time
  7. import os
  8.  
  9.  
  10. adminId = 50976308
  11.  
  12.  
  13. def Token():
  14. with open("token", "rb") as f:
  15. result = pickle.load(f)
  16. return result
  17.  
  18.  
  19. bot = TelegramBot(Token())
  20.  
  21.  
  22. def SaveOffset():
  23. global offset
  24. with open("offset", "wb") as f:
  25. pickle.dump(offset, f)
  26.  
  27.  
  28. def LoadDB(cel):
  29. if cel == "offset":
  30. print("Загрузка offset")
  31. else:
  32. print("Загрузка списка пользователей...")
  33. try:
  34. with open(cel, "rb") as f:
  35. result = pickle.load(f)
  36. except Exception:
  37. file = open(cel, "wb")
  38. file.close()
  39. print("Файл не найден!")
  40. if cel == "offset":
  41. result = 0
  42. else:
  43. result = []
  44. except pickle.UnpicklingError:
  45. file = open(cel, "wb")
  46. file.close()
  47. print("Ошибка загрузки!")
  48. if cel == "offset":
  49. result = 0
  50. else:
  51. result = []
  52. else:
  53. print("Загрузка прошла успешно!")
  54. return result
  55.  
  56.  
  57. def LoadUserDB(user_id, cel):
  58. file_name = cel + str(user_id)
  59. try:
  60. with open(file_name, "rb") as f:
  61. result = pickle.load(f)
  62. except Exception:
  63. file = open(file_name, "wb")
  64. file.close()
  65. print("Файл не найден!")
  66. result = [0, 0]
  67. except pickle.UnpicklingError:
  68. file = open(file_name, "wb")
  69. file.close()
  70. print("Ошибка загрузки!")
  71. result = [0, 0]
  72. else:
  73. print("Загрузка прошла успешно!")
  74. return result
  75.  
  76.  
  77. def NewUserAdd(user_id, cell):
  78. userlist = LoadDB(cell)
  79. first_len = len(userlist)
  80. if len(userlist) == 0:
  81. userlist.append(user_id)
  82. elif len(userlist) == 1:
  83. if userlist[0] != user_id:
  84. userlist.append(user_id)
  85. else:
  86. for i in range(0,1): #не используется по назначению
  87. for j in range(0,len(userlist)-1):
  88. if userlist[j] == user_id:
  89. break
  90. userlist.append(user_id)
  91. if first_len != len(userlist):
  92. with open(cell, "wb") as f:
  93. pickle.dump(userlist, f)
  94. x = True
  95. print("Добавлен новый пользователь!")
  96. else: x = False
  97. return x
  98.  
  99.  
  100. def NewUserInfoAdd(user_id, first_name, last_name, username):
  101. user_info = { "first_name" : first_name, "last_name" : last_name, "username" : username}
  102. with open("info" + str(user_id), "wb") as f:
  103. pickle.dump(user_info, f)
  104. print("Информация о пользователе добавлена")
  105.  
  106.  
  107. def UserInfo(user_id):
  108. print("Загрузка информации пользователя...")
  109. try:
  110. with open("info" + str(user_id), "rb") as f:
  111. user_info = pickle.load(f)
  112. except Exception:
  113. print("Информация не найдена!")
  114. user_info = False
  115. except pickle.UnpicklingError:
  116. print("Загрузка информации не возможна!")
  117. user_info = False
  118. else:
  119. ("Загрузка прошла успешно!")
  120. return user_info
  121.  
  122.  
  123. def CheckId():
  124. while True:
  125. while True:
  126. user_id_in = input("Введите id: ")
  127. try:
  128. user_id = int(user_id_in)
  129. except Exception:
  130. print("Ошибка! Попробуй еще раз.")
  131. else: break
  132. userlist = LoadDB("users")
  133. print(userlist)
  134. if len(userlist) != 0:
  135. for j in userlist:
  136. if j == user_id:
  137. print("Информация найдена. Показать? \n'yes' или 'no'")
  138. ans = input(">>> ")
  139. if ans == "yes":
  140. user_info = UserInfo(user_id)
  141. if user_info != False: print(user_info)
  142. break
  143. else: print("База данных пуста!")
  144. print("Выполнить поиск еще раз? \n'yes' или 'no'")
  145. while True:
  146. ans2 = input(">>> ")
  147. if ans2 == "yes":
  148. break
  149. elif ans2 == "no":
  150. break
  151. if ans2 == "no":
  152. break
  153.  
  154.  
  155. def NewAchUserAdd(do):
  156. while True:
  157. user_id_in = input("Введите id: ")
  158. try:
  159. user_id = int(user_id_in)
  160. except Exception:
  161. print("Ошибка! Попробуй еще раз.")
  162. else:
  163. break
  164. if do == "add":
  165. NewUserAdd(user_id, "userAchOn")
  166. if do == "del":
  167. AchUserDel(user_id)
  168.  
  169.  
  170. def AchUserDel(user_id):
  171. userlist = LoadDB("userAchOn")
  172. try:
  173. userlist.remove(user_id)
  174. except Exception:
  175. result = "Ошибка! Не было включено!"
  176. else:
  177. with open("userAchOn", "wb") as f:
  178. pickle.dump(userlist, f)
  179. os.remove("AchMsg" + str(user_id))
  180. os.remove("AchSim" + str(user_id))
  181. result = "Отключено!"
  182. return result
  183.  
  184.  
  185. def MsgCheck(): # получение сообщений с сервера
  186. print("Обновление сообщений...")
  187. global offset
  188. updates = bot.get_updates(offset + 1, 13, 0).wait()
  189. for update in updates:
  190. offset = update[0]
  191. user_id = update[1][1][0]
  192. chat_id = update[1][3][0]
  193. msg = update[1][7]
  194. first_name = update[1][1][1]
  195. last_name = update[1][1][2]
  196. username = update[1][1][3]
  197. audio = update[1][8]
  198. photo = update[1][9]
  199. sticker = update[1][10]
  200. video = update[1][11]
  201. location = update[1][13]
  202. if audio != None:
  203. if PreAchievement(user_id, "userAchOn") == True:
  204. MediaAchievement("audioAch", user_id, chat_id, Name(first_name, last_name))
  205. elif photo != None:
  206. if PreAchievement(user_id, "userAchOn") == True:
  207. MediaAchievement("photoAch", user_id, chat_id, Name(first_name, last_name))
  208. elif sticker != None:
  209. if PreAchievement(user_id, "userAchOn") == True:
  210. MediaAchievement("stickerAch", user_id, chat_id, Name(first_name, last_name))
  211. elif video != None:
  212. if PreAchievement(user_id, "userAchOn") == True:
  213. MediaAchievement("videoAch", user_id, chat_id, Name(first_name, last_name))
  214. elif location != None:
  215. if PreAchievement(user_id, "userAchOn") == True:
  216. MediaAchievement("locationAch", user_id, chat_id, Name(first_name, last_name))
  217. if msg == "/help": bot.send_message(chat_id, Help("chat"))
  218. elif msg == "/ach_on":
  219. result = NewUserAdd(user_id, "userAchOn")
  220. if result == True: bot.send_message(chat_id, "Активировано!")
  221. if result == False: bot.send_message(chat_id, "Ошибка!")
  222. elif msg == "/ach_off": bot.send_message(chat_id, AchUserDel(user_id))
  223. elif msg == "/ach_stats": bot.send_message(chat_id, AchUserStats(user_id, "chat", Name(first_name, last_name))
  224. elif msg == "/my_id": bot.send_message(chat_id, "Твой id: " + str(user_id))
  225. if chat_id == user_id: #пользователь пишет в личку
  226. if NewUserAdd(user_id, "users") == True: NewUserInfoAdd(user_id, first_name, last_name, username)
  227. print_msg = str(user_id) + " | "
  228. print_msg += Name(first_name, last_name)
  229. print_msg += " | "
  230. if msg != None:
  231. print_msg += msg
  232. if PreAchievement(user_id) == True:
  233. Achievement(user_id, msg, chat_id, Name(first_name, last_name))
  234. print(print_msg)
  235. print("Сообщения обработаны!")
  236. SaveOffset()
  237.  
  238.  
  239. def AchUserStats(user_id, mode, name):
  240. if mode == "chat":
  241. check_res = PreAchievement(user_id)
  242. if check_res == False:
  243. result = "Ошибка! Надо активировать!"
  244. if check_res == True:
  245. user_msgs = LoadUserDB(user_id, "AchMsg") #число сообщений, последняя ачивка
  246. user_si = LoadUserDB(user_id, "AchSim") #число символов, последняя ачивка
  247. audio = LoadUserDB(user_id, "audioAch")
  248. photo = LoadUserDB(user_id, "photoAch")
  249. video = LoadUserDB(user_id, "videoAch")
  250. sticker = LoadUserDB(user_id, "stickerAch")
  251. location = LoadUserDB(user_id, "locationAch")
  252. result = ("Отправлено (" + name +"): \n")
  253. result += (" " + str(user_msgs[1]) + " сообщений,\n")
  254. result += (" " + str(user_si[1]) + " символов,\n")
  255. result += (" " + str(audio[1]) + " аудио,\n")
  256. result += (" " + str(photo[1]) + " изображений,\n")
  257. result += (" " + str(video[1]) + " видео,\n")
  258. result += (" " + str(sticker[1] + " стикеров,\n")
  259. result += (" " + str(location[1]) + " местоположений.")
  260. return result
  261.  
  262.  
  263. def ShowOffset():
  264. global offset
  265. print(offset)
  266.  
  267.  
  268. def Help(mode):
  269. if mode == "console":
  270. result = """
  271. msgcheck - проверка сообщений
  272. automsgch - проверка сообщений опред. время [сек]
  273. checkid - проверка наличия id в БД
  274. showoffset - показ offset
  275. achion - включение 'ачивок' у пользователя
  276. achioff - отключение 'ачивок у пользователя
  277. achion userlist - список пользователей с включеными 'ачивками'
  278. userlist - список пользователей в БД
  279. exit - выход"""
  280. if mode == "chat":
  281. result = """
  282. /help - помощь
  283. /ach_on - включение 'ачивок'
  284. /ach_off - отключение 'ачивок'
  285. /ach_stats - статистика
  286. /my_id - показать id"""
  287. return result
  288.  
  289.  
  290. def UserAchievementSave(user_id, cel, x):
  291. file_name = cel + str(user_id)
  292. with open(file_name, "wb") as f:
  293. pickle.dump(x, f)
  294. print("Успешно сохранено!")
  295.  
  296.  
  297. def PreAchievement(user_id):
  298. userlist = LoadDB("userAchOn")
  299. if len(userlist) == 0:
  300. result = False
  301. if len(userlist) == 1:
  302. if userlist[0] == user_id:
  303. result = True
  304. else:
  305. result = False
  306. if len(userlist) > 1 :
  307. result = False
  308. for j in range(0, len(userlist) - 1):
  309. if userlist[j] == user_id:
  310. result = True
  311. break
  312. return result
  313.  
  314.  
  315. def Name(first_name, last_name):
  316. name = ""
  317. if first_name != None:
  318. name += first_name
  319. if last_name != None:
  320. name += " "
  321. name += last_name
  322. return name
  323.  
  324.  
  325. def Achievement(user_id, msg, chat_id, name):
  326. user_msgs = LoadUserDB(user_id, "AchMsg") #число сообщений, последняя ачивка
  327. user_si = LoadUserDB(user_id, "AchSim") #число символов, последняя ачивка
  328. user_msgs[0] += 1
  329. user_si[0] += len(msg)
  330. for j in range(1, 10000): #проверка и отправка ачивок "символов"
  331. if 1000*j > user_si[1]:
  332. if 1000*j <= user_si[0]:
  333. bot.send_message(chat_id, name + " набрал " + str(1000*j) + " символов!")
  334. user_si[1] = 1000*j
  335. break
  336. else: break
  337. for j in range(1, 2000):
  338. if 50*j > user_msgs[1]:
  339. if 50*j <= user_msgs[0]:
  340. bot.send_message(chat_id, name + " отправил " + str(50*j) + " сообщений!")
  341. user_msgs[1] = 50*j
  342. break
  343. else: break
  344. UserAchievementSave(user_id, "AchMsg", user_msgs)
  345. UserAchievementSave(user_id, "AchSim", user_si)
  346.  
  347.  
  348. def MediaAchievement(media, user_id, chat_id, name):
  349. user_stats = LoadUserDB(user_id, media)
  350. user_stats[0] += 1
  351. for j in range(1, 10000):
  352. if 50*j > user_stats[1]:
  353. if 50*j <= user_stats[0]:
  354. if media == "audioAch":
  355. thing = "аудио"
  356. if media == "photoAch":
  357. thing = "изображений"
  358. if media == "stickerAch":
  359. thing = "стикеров"
  360. if media == "videoAxh":
  361. thing = "видео"
  362. if media == "locationAch":
  363. thing = "местоположений"
  364. bot.send_message(chat_id, name + " отправил " + str(50*j) + " " + thing + "!")
  365. user_stats[1] = 50*j
  366. break
  367.  
  368.  
  369. def AutoMsgCheck(sec):
  370. start_time = time.clock()
  371. while True:
  372. try:
  373. MsgCheck()
  374. except Exception:
  375. print("Ошибка при обновлении!")
  376. if time.clock() - start_time >= sec:
  377. print("Обновление закончено!")
  378. break
  379. time.sleep(3)
  380.  
  381.  
  382. print("Загрузка прошла успешно!")
  383.  
  384.  
  385. offset = LoadDB("offset")
  386. while True:
  387. commInput = input(">>> ")
  388. if commInput == "msgcheck" :
  389. MsgCheck()
  390. elif commInput == "automsgch" : AutoMsgCheck(int(input("Время в секундах: ")))
  391. elif commInput == "help" : print(Help("console"))
  392. elif commInput == "checkid": CheckId()
  393. elif commInput == "showoffset": ShowOffset()
  394. elif commInput == "achion": NewAchUserAdd("add")
  395. elif commInput == "achioff": NewAchUserAdd("del")
  396. elif commInput == "achion userlist": print(LoadDB("userAchOn"))
  397. elif commInput == "userlist": print(LoadDB("users"))
  398. elif commInput == "exit" : break
  399. else: print("Команда не найдена!")
Compilation error #stdin compilation error #stdout 0s 0KB
stdin
Standard input is empty
compilation info
Traceback (most recent call last):
  File "/usr/lib/python3.4/py_compile.py", line 124, in compile
    _optimize=optimize)
  File "<frozen importlib._bootstrap>", line 1532, in source_to_code
  File "<frozen importlib._bootstrap>", line 321, in _call_with_frames_removed
  File "./prog.py", line 224
    elif msg == "/my_id": bot.send_message(chat_id, "Твой id: " + str(user_id))
       ^
SyntaxError: invalid syntax

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "/usr/lib/python3.4/py_compile.py", line 128, in compile
    raise py_exc
py_compile.PyCompileError:   File "./prog.py", line 224
    elif msg == "/my_id": bot.send_message(chat_id, "Твой id: " + str(user_id))
       ^
SyntaxError: invalid syntax

stdout
Standard output is empty