New command !weather and stability
This commit is contained in:
parent
a86536f928
commit
1424c66fd4
11
README.md
11
README.md
|
@ -1,10 +1,15 @@
|
||||||
# Мой личный бот на python для ВК
|
# Мой личный бот на python для ВК
|
||||||
#### от dan63047
|
#### от dan63047
|
||||||
|
|
||||||
|
Этот бот просто отвечает на поддержваемые запросы в переписке с сообществом
|
||||||
|
|
||||||
Для того, что бы бот работал, сначала нужно создать в папке бота файл `config.py`, который должен иметь следующее содержание:
|
Для того, что бы бот работал, сначала нужно создать в папке бота файл `config.py`, который должен иметь следующее содержание:
|
||||||
|
|
||||||
import vk_api
|
```python
|
||||||
token = "*токен вашего сообщества*"
|
import vk_api
|
||||||
vk = vk_api.VkApi(token=token)
|
import pyowm
|
||||||
|
vk = vk_api.VkApi(token="vk_group_access_token") # Токен сообщества в ВК
|
||||||
|
own = pyowm.OWM('OpenWeather_api_key', language='ru') # Ключ OpenWeather API для функции погоды
|
||||||
|
```
|
||||||
|
|
||||||
Запустите `start.py`, что бы бот начал слушать сервер
|
Запустите `start.py`, что бы бот начал слушать сервер
|
||||||
|
|
|
@ -2,7 +2,8 @@ import vk_api
|
||||||
import datetime
|
import datetime
|
||||||
import requests
|
import requests
|
||||||
import logging
|
import logging
|
||||||
from config import vk
|
import pyowm
|
||||||
|
from config import vk, owm
|
||||||
from bs4 import BeautifulSoup
|
from bs4 import BeautifulSoup
|
||||||
from vk_api.longpoll import VkLongPoll, VkEventType
|
from vk_api.longpoll import VkLongPoll, VkEventType
|
||||||
|
|
||||||
|
@ -15,7 +16,7 @@ class VkBot:
|
||||||
bot_logger.info("Создан объект бота!")
|
bot_logger.info("Создан объект бота!")
|
||||||
self._USER_ID = peer_id
|
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
|
@staticmethod
|
||||||
def _clean_all_tag_from_str(string_line):
|
def _clean_all_tag_from_str(string_line):
|
||||||
|
@ -32,14 +33,24 @@ class VkBot:
|
||||||
not_skip = True
|
not_skip = True
|
||||||
return result
|
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):
|
def get_info_user(self, id):
|
||||||
logger = logging.getLogger("dan63047bot.get_info_user")
|
logger = logging.getLogger("dan63047bot.get_info_user")
|
||||||
try:
|
try:
|
||||||
user_info = vk.method('users.get', {'user_ids': id, 'fields': 'verified,last_seen,sex'})
|
user_info = vk.method('users.get', {'user_ids': id, 'fields': 'verified,last_seen,sex'})
|
||||||
except vk_api.exceptions.ApiError as lol:
|
except vk_api.exceptions.ApiError as lol:
|
||||||
answer = "Пользователь не найден<br>"+str(lol)
|
logger.warning("Ошибка метода users.get: "+str(lol))
|
||||||
logger.warning(answer)
|
return "Пользователь не найден<br>"+str(lol)
|
||||||
return answer
|
|
||||||
|
|
||||||
logger.info("Результат метода API users.get: "+str(user_info))
|
logger.info("Результат метода API users.get: "+str(user_info))
|
||||||
if user_info[0]['is_closed']:
|
if user_info[0]['is_closed']:
|
||||||
|
@ -82,9 +93,8 @@ class VkBot:
|
||||||
try:
|
try:
|
||||||
group_info = vk.method('groups.getById', {'group_id': id, 'fields': 'description,members_count'})
|
group_info = vk.method('groups.getById', {'group_id': id, 'fields': 'description,members_count'})
|
||||||
except vk_api.exceptions.ApiError as lol:
|
except vk_api.exceptions.ApiError as lol:
|
||||||
answer = "Группа не найдена<br>"+str(lol)
|
logger.warning("Ошибка метода groups.getById: "+str(lol))
|
||||||
logger.warning(answer)
|
return "Группа не найдена<br>"+str(lol)
|
||||||
return answer
|
|
||||||
|
|
||||||
logger.info("Результат метода API groups.getById: "+str(group_info))
|
logger.info("Результат метода API groups.getById: "+str(group_info))
|
||||||
if group_info[0]['description'] == "":
|
if group_info[0]['description'] == "":
|
||||||
|
@ -106,12 +116,26 @@ class VkBot:
|
||||||
respond['text'] = "Ваш ид: "+str(self._USER_ID)
|
respond['text'] = "Ваш ид: "+str(self._USER_ID)
|
||||||
|
|
||||||
elif message[0] == self._COMMANDS[2] or message[0] == self._COMMANDS[5]:
|
elif message[0] == self._COMMANDS[2] or message[0] == self._COMMANDS[5]:
|
||||||
respond['text'] = "Я бот, призванный доставлять неудобства. <br>Команды:<br>!my_id - сообщит ваш id в ВК<br>!user_id *id* - сообщит информацию о этом пользователе<br>!group_id *id* - сообщит информацию о этой группе<br>!image - отправляет пока что только одну картинку (скоро планируется отправлять рандомную картинку из альбома)<br>!h, !help - справка<br>Дата последнего обновления: 04.04.2020 (перевод на python)<br>Проект бота на GitHub: https://github.com/dan63047/dan63047pythonbot"
|
respond['text'] = "Я бот, призванный доставлять неудобства. <br>Команды:<br>!my_id - сообщит ваш id в ВК<br>!user_id *id* - сообщит информацию о этом пользователе<br>!group_id *id* - сообщит информацию о этой группе<br>!image - отправляет пока что только одну картинку (скоро планируется отправлять рандомную картинку из альбома)<br>!weather *город* - отправляет текущую погоду в городе(данные из OpenWeather API)<br>!h, !help - справка<br>Дата последнего обновления: 05.04.2020<br>Проект бота на GitHub: https://github.com/dan63047/dan63047pythonbot"
|
||||||
|
|
||||||
elif message[0] == self._COMMANDS[3]:
|
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]:
|
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
|
return respond
|
||||||
|
|
2
start.py
2
start.py
|
@ -29,7 +29,7 @@ for event in longpoll.listen():
|
||||||
|
|
||||||
bot = VkBot(event.peer_id)
|
bot = VkBot(event.peer_id)
|
||||||
bot_answer = bot.new_message(event.text)
|
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'])
|
write_msg(event.peer_id, bot_answer['text'], bot_answer['attachment'])
|
||||||
|
|
||||||
logging.info(f'Ответ бота: {bot_answer}')
|
logging.info(f'Ответ бота: {bot_answer}')
|
Loading…
Reference in New Issue