!ban (someone asked)
This commit is contained in:
parent
fd025a1bb9
commit
65cff4180b
|
@ -23,7 +23,9 @@
|
||||||
* **!debug *game*** — бот отправляет всю статистику по игре !game
|
* **!debug *game*** — бот отправляет всю статистику по игре !game
|
||||||
* **!access *all/owner*** — позволяет в беседе установить уровень доступа к командам *!midnight*, *!subscribe* и *!debug*. *all* - все могут пользоваться. *owner* - только вы. Доступно только вам
|
* **!access *all/owner*** — позволяет в беседе установить уровень доступа к командам *!midnight*, *!subscribe* и *!debug*. *all* - все могут пользоваться. *owner* - только вы. Доступно только вам
|
||||||
* **!turnoff** — даёт боту команду на выключение. Доступно только вам
|
* **!turnoff** — даёт боту команду на выключение. Доступно только вам
|
||||||
* **!admin_mode** — если чат, в которой активируется команда, является беседой и в ней у бота есть полномочия администратора, то бот переходит в режим модерации. Пока что он может только кикать людей за @all и @online, реагировать на приход/уход участника беседы. Введите ещё раз, чтобы выключить режим модерации. Доступно только вам
|
* **!admin_mode** — если чат, в которой активируется команда, является беседой и в ней у бота есть полномочия администратора, то бот переходит в режим модерации. Пока что он может только кикать людей за @all и @online, реагировать на приход/уход участника беседы и дать возможность пользоваться командой *!ban*. Введите ещё раз, чтобы выключить режим модерации. Доступно только вам
|
||||||
|
* **!ban *@user*** — банит пользователя из беседы (в смысле выгоняет, юзер не сможет вернутся пока бот или админ не предложит). Требует режим модерации
|
||||||
|
|
||||||
# Установка и запуск бота
|
# Установка и запуск бота
|
||||||
Лучшим решением будет иметь платный аккаунт на [pythonanywhere](https://www.pythonanywhere.com/) чтобы запускать бота, как Always-on task и использовать MySQL базу данных. Можно, конечно, не использовать БД и запускать бота в консоли, но pythonanywhere может выключить вашу консоль, если вы долго не будете посещать её.
|
Лучшим решением будет иметь платный аккаунт на [pythonanywhere](https://www.pythonanywhere.com/) чтобы запускать бота, как Always-on task и использовать MySQL базу данных. Можно, конечно, не использовать БД и запускать бота в консоли, но pythonanywhere может выключить вашу консоль, если вы долго не будете посещать её.
|
||||||
## Основа
|
## Основа
|
||||||
|
|
|
@ -7,6 +7,7 @@ import logging
|
||||||
import pyowm
|
import pyowm
|
||||||
import random
|
import random
|
||||||
import json
|
import json
|
||||||
|
import re
|
||||||
import threading
|
import threading
|
||||||
import pymysql
|
import pymysql
|
||||||
import wikipediaapi as wiki
|
import wikipediaapi as wiki
|
||||||
|
@ -312,7 +313,7 @@ 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", "!random", "!admin_mode"]
|
"!echo", "!game", "!debug", "!midnight", "!access", "!turnoff", "!ban", "!subscribe", "!random", "!admin_mode"]
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return f"[BOT_{str(self._CHAT_ID)}] a: {str(self._ACCESS_TO_ALL)}, mn: {str(self._MIDNIGHT_EVENT)}, await: {str(self._AWAITING_INPUT_MODE)}, sub: {str(self._NEW_POST)}, adm: {str(self._ADMIN_MODE)}"
|
return f"[BOT_{str(self._CHAT_ID)}] a: {str(self._ACCESS_TO_ALL)}, mn: {str(self._MIDNIGHT_EVENT)}, await: {str(self._AWAITING_INPUT_MODE)}, sub: {str(self._NEW_POST)}, adm: {str(self._ADMIN_MODE)}"
|
||||||
|
@ -479,10 +480,10 @@ class VkBot:
|
||||||
try:
|
try:
|
||||||
if message[1] == "owner":
|
if message[1] == "owner":
|
||||||
respond['text'] = "Теперь некоторыми командами может пользоваться только владелец бота"
|
respond['text'] = "Теперь некоторыми командами может пользоваться только владелец бота"
|
||||||
self.change_flag('admin_mode', False)
|
self._ACCESS_TO_ALL = False
|
||||||
elif message[1] == "all":
|
elif message[1] == "all":
|
||||||
respond['text'] = "Теперь все могут пользоваться всеми командами"
|
respond['text'] = "Теперь все могут пользоваться всеми командами"
|
||||||
self.change_flag('admin_mode', True)
|
self._ACCESS_TO_ALL = True
|
||||||
else:
|
else:
|
||||||
respond['text'] = "Некорректный аргумент"
|
respond['text'] = "Некорректный аргумент"
|
||||||
except IndexError:
|
except IndexError:
|
||||||
|
@ -498,7 +499,29 @@ class VkBot:
|
||||||
exit(log(False, "[SHUTDOWN]"))
|
exit(log(False, "[SHUTDOWN]"))
|
||||||
|
|
||||||
elif message[0] == self._COMMANDS[15]:
|
elif message[0] == self._COMMANDS[15]:
|
||||||
respond['text'] = "Функция удалена за ненадобнастью"
|
if (self._OWNER or int(user_id) in config.admins or int(user_id) == int(config.owner_id)) and self._ADMIN_MODE and int(self._CHAT_ID) > 2000000000:
|
||||||
|
try:
|
||||||
|
victum = re.search(r'id\d+', message[1])
|
||||||
|
if int(victum[0][-2:]) != int(config.owner_id):
|
||||||
|
vk.method("messages.removeChatUser", {"chat_id": int(
|
||||||
|
self._CHAT_ID)-2000000000, "member_id": victum[0][-2:]})
|
||||||
|
log(False,
|
||||||
|
f"[BOT_{self._CHAT_ID}] user {victum[0]} has been kicked")
|
||||||
|
else:
|
||||||
|
log(False, f"[BOT_{self._CHAT_ID}] can't kick owner")
|
||||||
|
except IndexError:
|
||||||
|
respond['text'] = errors_array["miss_argument"]
|
||||||
|
except Exception as e:
|
||||||
|
respond['text'] = f"Ошибка: {str(e)}"
|
||||||
|
log(True,
|
||||||
|
f"[BOT_{self._CHAT_ID}] can't kick user {victum[0]} - {str(e)}")
|
||||||
|
else:
|
||||||
|
if int(self._CHAT_ID) <= 2000000000:
|
||||||
|
respond['text'] = "Данный чат не является беседой"
|
||||||
|
if not self._ADMIN_MODE:
|
||||||
|
respond["text"] = "Бот не в режиме модерирования"
|
||||||
|
else:
|
||||||
|
respond["text"] = errors_array["access"]
|
||||||
|
|
||||||
elif message[0] == self._COMMANDS[16]:
|
elif message[0] == self._COMMANDS[16]:
|
||||||
if self._ACCESS_TO_ALL or int(user_id) == int(config.owner_id):
|
if self._ACCESS_TO_ALL or int(user_id) == int(config.owner_id):
|
||||||
|
@ -527,6 +550,7 @@ class VkBot:
|
||||||
0, int(message[1][0]))
|
0, int(message[1][0]))
|
||||||
except:
|
except:
|
||||||
respond['text'] = self.random_number(0, 10)
|
respond['text'] = self.random_number(0, 10)
|
||||||
|
|
||||||
elif message[0] == self._COMMANDS[18]:
|
elif message[0] == self._COMMANDS[18]:
|
||||||
if int(self._CHAT_ID) <= 2000000000:
|
if int(self._CHAT_ID) <= 2000000000:
|
||||||
respond['text'] = "Данный чат не является беседой"
|
respond['text'] = "Данный чат не является беседой"
|
||||||
|
@ -549,6 +573,31 @@ class VkBot:
|
||||||
except Exception:
|
except Exception:
|
||||||
respond["text"] = "У меня нет прав администратора"
|
respond["text"] = "У меня нет прав администратора"
|
||||||
|
|
||||||
|
elif message[0] == self._COMMANDS[19]: #бот не может восстанавливать пользователя из беседы, соре
|
||||||
|
if (self._OWNER or int(user_id) in config.admins or int(user_id) == int(config.owner_id)) and self._ADMIN_MODE:
|
||||||
|
try:
|
||||||
|
victum = re.search(r'id\d+', message[1])
|
||||||
|
if int(victum[0][-2:]) != int(config.owner_id):
|
||||||
|
vk.method("messages.addChatUser", {"chat_id": int(
|
||||||
|
self._CHAT_ID)-2000000000, "user_id": victum[0][-2:]})
|
||||||
|
log(False,
|
||||||
|
f"[BOT_{self._CHAT_ID}] user {victum[0]} has been kicked")
|
||||||
|
else:
|
||||||
|
log(False, f"[BOT_{self._CHAT_ID}] can't kick owner")
|
||||||
|
except IndexError:
|
||||||
|
respond['text'] = errors_array["miss_argument"]
|
||||||
|
except Exception as e:
|
||||||
|
respond['text'] = f"Ошибка: {str(e)}"
|
||||||
|
log(True,
|
||||||
|
f"[BOT_{self._CHAT_ID}] can't kick user {victum[0]} - {str(e)}")
|
||||||
|
else:
|
||||||
|
if int(self._CHAT_ID) <= 2000000000:
|
||||||
|
respond['text'] = "Данный чат не является беседой"
|
||||||
|
if not self._ADMIN_MODE:
|
||||||
|
respond["text"] = "Бот не в режиме модерирования"
|
||||||
|
else:
|
||||||
|
respond["text"] = errors_array["access"]
|
||||||
|
|
||||||
if respond['text'] or respond['attachment']:
|
if respond['text'] or respond['attachment']:
|
||||||
self.send(respond['text'], respond['attachment'])
|
self.send(respond['text'], respond['attachment'])
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue