Про vk_api и стабильность - Python

Узнай цену своей работы

Формулировка задачи:

Итак,когда я начал писать чат-бота для вк,то столкнулся с тем,что программа вылетала каждые 20-30 минут.Подумал,что дело в циклическом обновлении и том,что вк ругается на слишком частые запросы.Тогда я погуглил и переписал программу с использованием LongPoll запросов.Теперь сообщение проверялось не по времени,а по обновлениям активности(новое сообщение ,пишет ли пользователь и т.д).Частота вылетов сократилась,но сами вылеты не исчезли.Тогда я подумал,что дело в том на кикие обновления должна реагировать программа.Путём нехитрых манипуляций выяснил,что если пользователь отправил сообщение,то обновление будет иметь такой вид [[7, 2000000001, 2571], [4, 2572, 8193, 2000000001, 1507203465, 'Кто ррр', {'from': '248404252'}]]}.Т.е нам надо проверить чтобы длинна updates(переменная хранит эти данные) была 2 и updates[1][0] был равен 4. Насчёт вылетов я не знаю,но появилась новая проблема:Программа реагирует только на 2 сообщения,А первое как будто не замечает.Вот в чём может быть дело?
Листинг программы
  1. import vk
  2. import time
  3. import random
  4. import requests
  5. token = 'bdd6a8bd5c834c4c49f0731c895d533b50c91a69739d38d1611d40b6465ea9886132f11fef602f23a7bae'
  6. bot = vk.API(vk.Session(access_token = 'bdd6a8bd5c834c4c49f0731c895d533b50c91a69739d38d1611d40b6465ea9886132f11fef602f23a7bae'))
  7. last_mid = 0
  8. msg_info = bot.messages.get(count = 1)
  9. #print(msg_info)
  10. print(msg_info[1])
  11. while True:
  12. data = requests.get('https://api.vk.com/method/messages.getLongPollServer',
  13. params={'access_token': token}).json()['response']
  14. response = requests.get('https://{server}?act=a_check&key={key}&ts={ts}&wait=90&mode=2&version=2'.format(server=data['server'], key=data['key'], ts=data['ts'])).json()
  15. updates = response['updates']
  16. print(response)
  17. if(len(updates) ==2):
  18. if(updates[1][0] == 4):
  19. msg_info = bot.messages.get(count = 1) #attachment =
  20. msg_body = msg_info[1]['body']
  21. #c_mid = msg_info[1]['mid']
  22. if True:
  23. #last_mid = c_mid
  24.  
  25. if msg_body[0:5] in['/пост','/post']:
  26. bot.wall.post(message = msg_body[5:])
  27. '''
  28. if msg_body[0:7] in['/a_post']:
  29. at_type = str(msg_info[1]['attachment']["type"])
  30. if at_type in['photo']:
  31. at = str(at_type + str(msg_info[1]['attachment'][at_type]['owner_id']) + '_'+str(msg_info[1]['attachment'][at_type]['pid']))
  32. photo = bot.photos.copy(owner_id = msg_info[1]['attachment'][at_type]['owner_id'],photo_id =msg_info[1]['attachment'][at_type]['pid'],access_key = msg_info[1]['attachment'][at_type]['access_key'])
  33. bot.wall.post(message = msg_body[8:],attachment = at_type+'446978051_'+str(photo))
  34. print('work')
  35. '''
  36. if msg_body[0:5] in['/инфа']:
  37. print(msg_info)
  38. per = random.randint(1,4)
  39. if per == 1:
  40. inf = random.randint(0,40)
  41. if per == 3 or per == 2:
  42. inf = random.randint(40,75)
  43. if per == 4:
  44. inf = random.randint(90,100)
  45. print(inf)
  46. bot.messages.send(chat_id =1,message = "Инфа подтверждена на "+str(inf)+"%")
  47. if msg_body[0:3] in['кто','ктО','кТо','кТО','Кто','КтО','КТо','КТО']:
  48. #print(type(msg_info[1]['chat_id']))
  49. listt = bot.messages.getChatUsers(chat_id = int(msg_info[1]['chat_id']),fields = 'screen_name')
  50. user = listt[random.randint(0,len(listt)-1)]
  51. f_n = user['first_name']
  52. l_n = user['last_name']
  53. while l_n in['Оверлорд']:
  54. user = listt[random.randint(0,len(listt)-1)]
  55. f_n = user['first_name']
  56. l_n = user['last_name']
  57. msg = ['Я думаю это','Скорее всего это','Может быть это','Инфа сотка это','Ну даже не занаю,наверное это','По любому']
  58. mmsg = msg[random.randint(0,len(msg)-1)]
  59. bot.messages.send(chat_id = int(msg_info[1]['chat_id']),message = mmsg+" "+f_n+" " + l_n)
  60. if msg_body[0:13] in['Слава Украине','слава Украине','Слава украине','слава украине']:
  61. bot.messages.send(chat_id =int(msg_info[1]['chat_id']),message = "Героям слава!",attachment = 'audio166313120_274537504')
  62. if msg_body[0:11] in['Слава КПСС','слава КПСС','слава кпсс','Слава кпсс']:
  63. bot.messages.send(chat_id = int(msg_info[1]['chat_id']),message = 'Ленин жив!',attachment = 'audio16689125_106992266')
  64. data['ts'] = response['ts']
Проблему решил

Решение задачи: «Про vk_api и стабильность»

textual
Листинг программы
  1. if msg[:3].lower() == 'кто':

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 3.857 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут