diff --git a/README.md b/README.md
index 84444b7..98dbc3b 100644
--- a/README.md
+++ b/README.md
@@ -1,10 +1,15 @@
# Мой личный бот на python для ВК
#### от dan63047
+
+Этот бот просто отвечает на поддержваемые запросы в переписке с сообществом
Для того, что бы бот работал, сначала нужно создать в папке бота файл `config.py`, который должен иметь следующее содержание:
- import vk_api
- token = "*токен вашего сообщества*"
- vk = vk_api.VkApi(token=token)
+```python
+import vk_api
+import pyowm
+vk = vk_api.VkApi(token="vk_group_access_token") # Токен сообщества в ВК
+own = pyowm.OWM('OpenWeather_api_key', language='ru') # Ключ OpenWeather API для функции погоды
+```
Запустите `start.py`, что бы бот начал слушать сервер
diff --git a/dan63047bot.py b/dan63047bot.py
index 7d7c28c..41d8262 100644
--- a/dan63047bot.py
+++ b/dan63047bot.py
@@ -2,7 +2,8 @@ import vk_api
import datetime
import requests
import logging
-from config import vk
+import pyowm
+from config import vk, owm
from bs4 import BeautifulSoup
from vk_api.longpoll import VkLongPoll, VkEventType
@@ -15,7 +16,7 @@ class VkBot:
bot_logger.info("Создан объект бота!")
self._USER_ID = peer_id
- self._COMMANDS = ["!image", "!my_id", "!h", "!user_id", "!group_id", "!help"]
+ self._COMMANDS = ["!image", "!my_id", "!h", "!user_id", "!group_id", "!help", "!weather"]
@staticmethod
def _clean_all_tag_from_str(string_line):
@@ -32,14 +33,24 @@ class VkBot:
not_skip = True
return result
+ def get_weather(self, place):
+ logger = logging.getLogger("dan63047bot.get_weather")
+ try:
+ weather_request = owm.weather_at_place(place)
+ except pyowm.exceptions.api_response_error.NotFoundError as i:
+ logger.warning("Ошибка OpenWeather API: "+str(i))
+ return "Такого города нет, либо данных о погоде нет"
+ weather_answer = weather_request.get_weather()
+ logger.info("Результат поиска погоды через OpenWeather API: "+str(weather_answer))
+ return "В городе "+place+" сейчас "+weather_answer.get_detailed_status()+", "+str(round(weather_answer.get_temperature('celsius')['temp']))+"°C"
+
def get_info_user(self, id):
logger = logging.getLogger("dan63047bot.get_info_user")
try:
user_info = vk.method('users.get', {'user_ids': id, 'fields': 'verified,last_seen,sex'})
except vk_api.exceptions.ApiError as lol:
- answer = "Пользователь не найден
"+str(lol)
- logger.warning(answer)
- return answer
+ logger.warning("Ошибка метода users.get: "+str(lol))
+ return "Пользователь не найден
"+str(lol)
logger.info("Результат метода API users.get: "+str(user_info))
if user_info[0]['is_closed']:
@@ -82,9 +93,8 @@ class VkBot:
try:
group_info = vk.method('groups.getById', {'group_id': id, 'fields': 'description,members_count'})
except vk_api.exceptions.ApiError as lol:
- answer = "Группа не найдена
"+str(lol)
- logger.warning(answer)
- return answer
+ logger.warning("Ошибка метода groups.getById: "+str(lol))
+ return "Группа не найдена
"+str(lol)
logger.info("Результат метода API groups.getById: "+str(group_info))
if group_info[0]['description'] == "":
@@ -106,12 +116,26 @@ class VkBot:
respond['text'] = "Ваш ид: "+str(self._USER_ID)
elif message[0] == self._COMMANDS[2] or message[0] == self._COMMANDS[5]:
- respond['text'] = "Я бот, призванный доставлять неудобства.
Команды:
!my_id - сообщит ваш id в ВК
!user_id *id* - сообщит информацию о этом пользователе
!group_id *id* - сообщит информацию о этой группе
!image - отправляет пока что только одну картинку (скоро планируется отправлять рандомную картинку из альбома)
!h, !help - справка
Дата последнего обновления: 04.04.2020 (перевод на python)
Проект бота на GitHub: https://github.com/dan63047/dan63047pythonbot"
+ respond['text'] = "Я бот, призванный доставлять неудобства.
Команды:
!my_id - сообщит ваш id в ВК
!user_id *id* - сообщит информацию о этом пользователе
!group_id *id* - сообщит информацию о этой группе
!image - отправляет пока что только одну картинку (скоро планируется отправлять рандомную картинку из альбома)
!weather *город* - отправляет текущую погоду в городе(данные из OpenWeather API)
!h, !help - справка
Дата последнего обновления: 05.04.2020
Проект бота на GitHub: https://github.com/dan63047/dan63047pythonbot"
elif message[0] == self._COMMANDS[3]:
- respond['text'] = self.get_info_user(message[1])
+ try:
+ respond['text'] = self.get_info_user(message[1])
+ except IndexError:
+ respond['text'] = "Отсуствует аргумент"
elif message[0] == self._COMMANDS[4]:
- respond['text'] = self.get_info_group(message[1])
+ try:
+ respond['text'] = respond['text'] = self.get_info_group(message[1])
+ except IndexError:
+ respond['text'] = "Отсуствует аргумент"
+
+ elif message[0] == self._COMMANDS[6]:
+ try:
+ respond['text'] = respond['text'] = self.get_weather(message[1])
+ except IndexError:
+ respond['text'] = "Отсуствует аргумент"
+ except AttributeError as lol:
+ respond['text'] = "Пайтон в ахуе: "+str(lol)
return respond
diff --git a/start.py b/start.py
index 849353c..227d78d 100644
--- a/start.py
+++ b/start.py
@@ -29,7 +29,7 @@ for event in longpoll.listen():
bot = VkBot(event.peer_id)
bot_answer = bot.new_message(event.text)
- if bot_answer['text']:
+ if bot_answer['text'] or bot_answer['attachment']:
write_msg(event.peer_id, bot_answer['text'], bot_answer['attachment'])
logging.info(f'Ответ бота: {bot_answer}')
\ No newline at end of file