This repository was archived by the owner on Oct 4, 2019. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathfilters.py
77 lines (58 loc) · 2.88 KB
/
filters.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
# -*- coding: utf-8 -*-
import vk_requests
import re
from vbio import VkBot, LongPollClient
api = vk_requests.create_api(service_token='<токен группы>')
bot = VkBot(api=api)
handler = LongPollClient(bot)
# Будет вызываться только если текст сообщения подходит
# под регулярное выражение. Также можно использовать строку, если вам
# не нужно использовать флаги.
# В поле m.regex_ будет сохранён groupdict.
@bot.message_handler(regexp=re.compile('сумма (?P<first>[0-9]+) (?P<second>[0-9]+)', re.IGNORECASE))
def regexp(m):
# USR: сумма 2 2
# BOT: 2 + 2 = 4
m.answer(message='{} + {} = {}'.format(
m.regexp_['first'], m.regexp_['second'],
int(m.regexp_['first']) + int(m.regexp_['second'])
))
# Будет вызываться если сообщения содержит все
# типы вложений из переданного списка
@bot.message_handler(content_type=['photo', 'text'])
def content_type(m):
m.answer(message='Вы отправили фото и текст!')
# Будет вызываться если функция func вернет True
@bot.message_handler(func=lambda m: m.text.lower() == m.text.lower()[::-1])
def func(m):
m.answer(message='Вы ввели палиндром!')
# Вызывается, если поле "command" из m.payload сообщения равна
# command
@bot.message_handler(command='start')
def command(m):
m.answer(message='Вы нажали кнопку "Начать"!')
# Если True, то вызывается только если сообщение отправлено в конференции,
# иначе только если из личных сообщений
@bot.message_handler(from_chat=True)
def payload(m):
m.answer(message='Вы отправили это сообщение из чата #%i' % (m.peer_id,))
# Кстати, можно комбинировать несколько фильтров.
# Например эта команда будет работать только в ЛС бота.
# А ещё она не будет регистронезависимой!
@bot.message_handler(regexp=r'умнож(ь|ить) (?P<first>[0-9]+) (?P<second>[0-9]+)', from_chat=False)
def mul(m):
m.answer(
message='{first} * {second} = {}'.format(
int(m.regexp_['first']) * int(m.regexp_['second']),
**m.regexp_
)
)
# Будет вызываться если в чат вошёл новый пользователь.
@bot.message_handler(action='chat_invite_user')
@bot.message_handler(action='chat_invite_user_by_link')
def greet(m):
m.answer(
message='В чате теперь новый пользователь!'
)
if __name__ == '__main__':
handler.run()