Advertisement
Guest User

Untitled

a guest
Jan 24th, 2020
166
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.71 KB | None | 0 0
  1. import re
  2. from vkbottle import Bot, Message
  3. from vkbottle.rule import AbstractMessageRule
  4. from vkbottle.types.events.community.events_objects import WallPostNew
  5. from units import *
  6.  
  7.  
  8. bot = Bot(token=token, group_id=group_id, debug=False)
  9. vk = vk_api.VkApi(token=token)
  10. with open("users.txt") as f:
  11.     users.extend(list(set(int(str(i).strip()) for i in f.readlines())))
  12.  
  13.  
  14. class Permission(AbstractMessageRule):
  15.     def __init__(self, mode: str):
  16.         self.mode = mode
  17.  
  18.     def check(self, msg: Message):
  19.         if self.mode is 'user':
  20.             if re.match(r"(?i)(помощь|меню|хелп)", msg.text.lower()):
  21.                 return True
  22.  
  23.  
  24. @bot.on.message(Permission('keyboard'), text="/test")
  25. async def on_test(ans: Message):
  26.     keyboard = keyboard_gen(
  27.         [[{'text': 'Начать', 'color': 'primary', 'payload': {'command': 'start'}}]]
  28.     )
  29.     await ans("Клавиатура отправлена", keyboard=keyboard)
  30.  
  31.  
  32. @bot.on.chat_message(Permission('cmd'), text="/рассылка <attach> <text>")
  33. async def on_mailing(ans: Message, attach, text):
  34.     await ans(f"Запускаю рассылку для {len(users)} пользователей.")
  35.     Thread(target=start_mailing, args=(vk, text, attach)).start()
  36.  
  37.  
  38. @bot.on.message(Permission('user'), text="<arg>")
  39. @bot.on.message.payload({"command": "start"})
  40. async def on_start(ans: Message, arg):
  41.     events.append({
  42.         'peer_id': ans.peer_id,
  43.         'message': for_start.format(await get_name(bot, ans.peer_id)),
  44.         'keyboard': keyboard_gen(main_menu, one_time=False)
  45.     })
  46.  
  47.  
  48. @bot.on.message.payload({'command': 'main'})
  49. async def on_main(ans: Message):
  50.     events.append({
  51.         'peer_id': ans.peer_id,
  52.         'message': 'Выберите действие',
  53.         'keyboard': await on_keyboard(ans.peer_id)
  54.     })
  55.  
  56.  
  57. @bot.on.message.payload({'act': 'back'})
  58. async def to_main(ans: Message):
  59.     events.append({
  60.         'peer_id': ans.peer_id,
  61.         'message': 'Выход из управления рассылкой',
  62.         'keyboard': keyboard_gen(main_menu)
  63.     })
  64.  
  65.  
  66. @bot.on.message.payload({'act': 'add'})
  67. async def on_subscribe(ans: Message):
  68.     if ans.peer_id not in users:
  69.         await to_file(ans.peer_id, 'add')
  70.     else:
  71.         events.append({
  72.             'peer_id': ans.peer_id,
  73.             'message': 'Вы и так подписаны на рассылку',
  74.         })
  75.  
  76.  
  77. @bot.on.message.payload({'act': 'remove'})
  78. async def unsubscribe(ans: Message):
  79.     if ans.peer_id in users:
  80.         await to_file(ans.peer_id, 'remove')
  81.     else:
  82.         events.append({
  83.             'peer_id': ans.peer_id,
  84.             'message': 'Вы и так отписаны от рассылки.',
  85.         })
  86.  
  87.  
  88. @bot.on.event.wall_post_new()
  89. async def wrapper(event: WallPostNew):
  90.     print(event.post_type)
  91.     if event.post_type != "suggest":
  92.         Thread(target=start_mailing, args=(
  93.             vk,
  94.             '🔔 Новый пост в нашей группе!',
  95.             f'wall-{group_id}_{event.id}'
  96.         )).start()
  97.  
  98.  
  99. def events_parser():
  100.     while True:
  101.         if events:
  102.             event_patcher(events)
  103.             events.clear()
  104.  
  105.  
  106. def event_patcher(data: list):
  107.     num = 0
  108.     if len(data) > 25:
  109.         while num < len(data):
  110.             with vk_api.VkRequestsPool(vk) as p:
  111.                 for i in data[num: num + 25]:
  112.                     p.method("messages.send", {**i, 'random_id': 0})
  113.                 num += 25
  114.     else:
  115.         with vk_api.VkRequestsPool(vk) as p:
  116.             for i in data:
  117.                 p.method("messages.send", {**i, 'random_id': 0})
  118.  
  119.  
  120. if __name__ == '__main__':
  121.     Thread(target=events_parser).start()
  122.     bot.run_polling()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement