-
Notifications
You must be signed in to change notification settings - Fork 12
/
Copy pathsimple_bot.py
77 lines (62 loc) · 3.56 KB
/
simple_bot.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
# Документация библиотеки vk_api: https://github.com/python273/vk_api
# Официальная документация VK API по разделу сообщений: https://vk.com/dev/messages
# Получить токен: https://vkhost.github.io/
import vk_api # использование VK API
from vk_api.utils import get_random_id # снижение количества повторных отправок сообщения
from dotenv import load_dotenv # загрузка информации из .env-файла
import os # работа с файловой системой
class Bot:
"""
Базовый класс бота ВКонтакте
"""
# текущая сессия ВКонтакте
vk_session = None
# доступ к API ВКонтакте
vk_api_access = None
# пометка авторизованности
authorized = False
# id пользователя ВКонтакте (например, 1234567890) в виде строки
# можно использовать, если диалог будет вестись только с конкретным человеком
default_user_id = None
def __init__(self):
"""
Инициализация бота при помощи получения доступа к API ВКонтакте
"""
# загрузка информации из .env-файла
load_dotenv()
# авторизация
self.vk_api_access = self.do_auth()
if self.vk_api_access is not None:
self.authorized = True
# получение id пользователя из файла настроек окружения .env в виде строки USER_ID="1234567890"
self.default_user_id = os.getenv("USER_ID")
def do_auth(self):
"""
Авторизация за пользователя (не за группу или приложение)
Использует переменную, хранящуюся в файле настроек окружения .env в виде строки ACCESS_TOKEN="1q2w3e4r5t6y7u8i9o..."
:return: возможность работать с API
"""
token = os.getenv("ACCESS_TOKEN")
try:
self.vk_session = vk_api.VkApi(token=token)
return self.vk_session.get_api()
except Exception as error:
print(error)
return None
def send_message(self, receiver_user_id: str = None, message_text: str = "тестовое сообщение"):
"""
Отправка сообщения от лица авторизованного пользователя
:param receiver_user_id: уникальный идентификатор получателя сообщения
:param message_text: текст отправляемого сообщения
"""
if not self.authorized:
print("Unauthorized. Check if ACCESS_TOKEN is valid")
return
# если не указан ID - берём значение по умолчанию, если таковое указано в .env-файле
if receiver_user_id is None:
receiver_user_id = self.default_user_id
try:
self.vk_api_access.messages.send(user_id=receiver_user_id, message=message_text, random_id=get_random_id())
print(f"Сообщение отправлено для ID {receiver_user_id} с текстом: {message_text}")
except Exception as error:
print(error)