!random & now bot react on event MESSAGE_DENY

This commit is contained in:
dan63047 2020-05-27 18:26:50 +03:00
parent 9cf3906070
commit 3d2b75044c
4 changed files with 41 additions and 5 deletions

1
.gitignore vendored
View File

@ -11,3 +11,4 @@ test.py
.idea/inspectionProfiles/profiles_settings.xml .idea/inspectionProfiles/profiles_settings.xml
randomcolor.jpg randomcolor.jpg
.idea/.gitignore .idea/.gitignore
ossworkspace.code-workspace

View File

@ -29,6 +29,7 @@ owm = pyowm.OWM('OpenWeather_api_key', language='ru') # Ключ OpenWeather API
* **!user_id *id*** — бот отправляет *id* нужного вам пользователя в vk api методом `users.get` и отправляет вам полученные этим методом данные: имя, фамилия, id, пол, время последнего онлайна и платформы, закрыт ли профиль * **!user_id *id*** — бот отправляет *id* нужного вам пользователя в vk api методом `users.get` и отправляет вам полученные этим методом данные: имя, фамилия, id, пол, время последнего онлайна и платформы, закрыт ли профиль
* **!group_id *id*** — бот отправляет *id* нужного вам сообщества в vk api методом `groups.getById` и отправляет вам полученные этим методом данные: название, описание, id, количество подписчиков * **!group_id *id*** — бот отправляет *id* нужного вам сообщества в vk api методом `groups.getById` и отправляет вам полученные этим методом данные: название, описание, id, количество подписчиков
* **!image** — бот, с помощью костыля в виде сервисного ключа приложения, получает vk api методом `photos.get` фотографии альбома, выбирает с помощью функции в python `random.randrange` одну фотографию и отправляет вам её как attachment * **!image** — бот, с помощью костыля в виде сервисного ключа приложения, получает vk api методом `photos.get` фотографии альбома, выбирает с помощью функции в python `random.randrange` одну фотографию и отправляет вам её как attachment
* **!random *число1* *число2*** — бот генерирует с помощью `random.randint()` случайное число и отправляет его вам. Если без аргументов, то число от 0 до 10. Если есть одно число, то от 0 до *число1*. Если есть оба числа, то от *число1* до *число2*
* **!weather *город*** — бот получает с помощью OpenWeather API текущую погоду в городе и отправляет её вам * **!weather *город*** — бот получает с помощью OpenWeather API текущую погоду в городе и отправляет её вам
* **!wiki *запрос*** — бот получает с помощью Wikipedia API краткое описание статьи по запросу и отправляет её вам * **!wiki *запрос*** — бот получает с помощью Wikipedia API краткое описание статьи по запросу и отправляет её вам
* **!byn** — бот получает с помощью НБ РБ API текущий курс белорусского рубля и отправляет её вам * **!byn** — бот получает с помощью НБ РБ API текущий курс белорусского рубля и отправляет её вам

View File

@ -109,10 +109,10 @@ class VkBot:
self._OWNER = False self._OWNER = False
self._COMMANDS = ["!image", "!my_id", "!h", "!user_id", "!group_id", "!help", "!weather", "!wiki", "!byn", self._COMMANDS = ["!image", "!my_id", "!h", "!user_id", "!group_id", "!help", "!weather", "!wiki", "!byn",
"!echo", "!game", "!debug", "!midnight", "!access", "!turnoff", "!reminder", "!subscribe"] "!echo", "!game", "!debug", "!midnight", "!access", "!turnoff", "!reminder", "!subscribe", "!random"]
def __str__(self): def __str__(self):
return f"peer_id: {str(self._CHAT_ID)}, m: {str(self._MIDNIGHT_EVENT)}, await: {str(self._AWAITING_INPUT_MODE)}, tasks: {len(users[self._CHAT_ID]['tasks'])}" return f"[BOT_{str(self._CHAT_ID)}] a: {str(self._ACCESS_LEVEL)}, mn: {str(self._MIDNIGHT_EVENT)}, await: {str(self._AWAITING_INPUT_MODE)}, tasks: {len(users[self._CHAT_ID]['tasks'])}, sub: {str(self._NEW_POST)}"
def __del__(self): def __del__(self):
log(False, f"[BOT_{str(self._CHAT_ID)}] Bot-object has been deleted") log(False, f"[BOT_{str(self._CHAT_ID)}] Bot-object has been deleted")
@ -315,6 +315,17 @@ class VkBot:
else: else:
respond['text'] = errors_array["access"] respond['text'] = errors_array["access"]
elif message[0] == self._COMMANDS[17]:
try:
message[1] = message[1].split(' ', 1)
try:
respond['text'] = self.random_number(int(message[1][0]), int(message[1][1]))
except:
respond['text'] = self.random_number(0, int(message[1][0]))
except:
respond['text'] = self.random_number(0, 10)
if respond['text'] or respond['attachment']: if respond['text'] or respond['attachment']:
self.send(respond['text'], respond['attachment']) self.send(respond['text'], respond['attachment'])
@ -563,6 +574,10 @@ class VkBot:
log(True, err) log(True, err)
return "Невозможно получить данные из НБ РБ: " + str(mda) return "Невозможно получить данные из НБ РБ: " + str(mda)
def random_number(self, lower, higher):
r = random.randint(lower, higher)
return f"Рандомное число от {lower} до {higher}:<br>{r}"
def change_await(self, awaiting=None): def change_await(self, awaiting=None):
self._AWAITING_INPUT_MODE = awaiting self._AWAITING_INPUT_MODE = awaiting
try: try:
@ -643,8 +658,11 @@ def bots():
log(False, f"[NEW_POST] id{event.object.id}") log(False, f"[NEW_POST] id{event.object.id}")
for i in users: for i in users:
bot[int(i)].event("post", event.object) bot[int(i)].event("post", event.object)
else: elif event.type == VkBotEventType.MESSAGE_DENY:
log(False, str(event)) log(False, f"User {event.object.user_id} deny messages from that group")
del bot[int(event.object.user_id)]
del users[int(event.object.user_id)]
update_users_json(users)
except Exception as kek: except Exception as kek:
err = "Беды с ботом: " + str(kek) err = "Беды с ботом: " + str(kek)
log(True, err) log(True, err)

View File

@ -1,17 +1,33 @@
Я бот, призванный доставлять неудобства. Я бот, призванный доставлять неудобства.
Команды: Команды:
!my_id - сообщит ваш id в ВК !my_id - сообщит ваш id в ВК
!user_id *id* - сообщит информацию о этом пользователе !user_id *id* - сообщит информацию о этом пользователе
!group_id *id* - сообщит информацию о этой группе !group_id *id* - сообщит информацию о этой группе
!image - отправляет рандомную картинку из альбома !image - отправляет рандомную картинку из альбома
!weather *город* - отправляет текущую погоду в городе (данные из OpenWeather API) !weather *город* - отправляет текущую погоду в городе (данные из OpenWeather API)
!wiki *запрос* - отправляет информацию об этом из Wikipedia !wiki *запрос* - отправляет информацию об этом из Wikipedia
!byn - отправляет текущий курс валют, полученный из API НБ РБ !byn - отправляет текущий курс валют, полученный из API НБ РБ
!echo - бот отправляет вам всё, что вы ему пишите !echo - бот отправляет вам всё, что вы ему пишите
!game *камень/ножницы/бумага/статистика* - бот будет играть с вами в "Камень, ножницы, бумага" и записывать статистику !game *камень/ножницы/бумага/статистика* - бот будет играть с вами в "Камень, ножницы, бумага" и записывать статистику
!random *число1* *число2* - генерирует случайное число и отправляет его вам. Если без аргументов, то число от 0 до 10. Если есть одно число, то от 0 до *число1*. Если есть оба числа, то от *число1* до *число2*
!midnight - бот будет уведомлять вас о 00:00 по Москве. Отправьте ещё раз, чтобы бот больше вас не уведомлял !midnight - бот будет уведомлять вас о 00:00 по Москве. Отправьте ещё раз, чтобы бот больше вас не уведомлял
!reminder *set/list/delete* - напоминалка. set устанавливает напоминание, delete удаляет, list выдаёт список ваших напоминаний !reminder *set/list/delete* - напоминалка. set устанавливает напоминание, delete удаляет, list выдаёт список ваших напоминаний
!subscribe - бот будет уведомлять вас новых постах в группе. Отправьте ещё раз, чтобы бот больше вас не уведомлял !subscribe - бот будет уведомлять вас новых постах в группе. Отправьте ещё раз, чтобы бот больше вас не уведомлял
!h, !help - справка !h, !help - справка
Дата последнего обновления: 25.05.2020 (Эта справка вынесена в txt файл)
Дата последнего обновления: 27.05.2020 (!random)
Проект бота на GitHub: https://github.com/dan63047/dan63047pythonbot Проект бота на GitHub: https://github.com/dan63047/dan63047pythonbot