Removed !leave, added IP ban system
This commit is contained in:
@@ -173,9 +173,61 @@ async def _on_cmd_name(room: MatrixRoom, args: list[str]) -> None:
|
||||
# respond
|
||||
await _bot.send_text_to_room(room.room_id, response, is_html=True)
|
||||
|
||||
async def _on_cmd_leave(room: MatrixRoom, args: list[str]) -> None:
|
||||
"""!leave"""
|
||||
await _bot.send_text_to_room(room.room_id, "<strong>Команда не реализована</strong>", is_html=True)
|
||||
async def _on_cmd_ban(room: MatrixRoom, args: list[str]) -> None:
|
||||
"""!ban"""
|
||||
# check arguments
|
||||
if len(args) < 2:
|
||||
error = "<strong>Формат: <code>!ban <IP> <SECONDS> [REASON]</code></strong>"
|
||||
await _bot.send_text_to_room(room.room_id, error, is_html=True)
|
||||
return
|
||||
# get args
|
||||
try:
|
||||
ip = args[0]
|
||||
duration = float(args[1])
|
||||
reason = " ".join(args[2:]) if args[2:] else "Manual ban"
|
||||
except:
|
||||
error = "<strong>Возникла ошибка. Наверняка неправильно указаны секунды.</strong>"
|
||||
await _bot.send_text_to_room(room.room_id, error, is_html=True)
|
||||
return
|
||||
# ban
|
||||
try:
|
||||
await _db.ban_create(ip, time.time() + duration, reason)
|
||||
await _bot.send_text_to_room(room.room_id, "<strong>IP адрес заблокирован</strong>", is_html=True)
|
||||
except:
|
||||
await _bot.send_text_to_room(room.room_id, "<strong>Возникла ошибка</strong>", is_html=True)
|
||||
|
||||
async def _on_cmd_unban(room: MatrixRoom, args: list[str]) -> None:
|
||||
"""!unban"""
|
||||
# check arguments
|
||||
if len(args) != 1:
|
||||
error = "<strong>Формат: <code>!ban <IP></code></strong>"
|
||||
await _bot.send_text_to_room(room.room_id, error, is_html=True)
|
||||
return
|
||||
# unban
|
||||
try:
|
||||
await _db.ban_delete(args[0])
|
||||
await _bot.send_text_to_room(room.room_id, "<strong>IP адрес разблокирован (если он был заблокирован)</strong>", is_html=True)
|
||||
except:
|
||||
await _bot.send_text_to_room(room.room_id, "<strong>Возникла ошибка</strong>", is_html=True)
|
||||
|
||||
async def _on_cmd_bans(room: MatrixRoom, args: list[str]) -> None:
|
||||
"""!bans"""
|
||||
# list
|
||||
bans = _db.ban_get_all()
|
||||
if not bans:
|
||||
await _bot.send_text_to_room(room.room_id, "<strong>Нет заблокированных IP адресов</strong>", is_html=True)
|
||||
return
|
||||
await _bot.send_text_to_room(room.room_id, f"<strong>Статус бана 127.0.0.1: {"БАН" if _db.ban_check("127.0.0.1") else "небан"}</strong>", is_html=True)
|
||||
# create the response
|
||||
result = "<strong>Список заблокированных IP</strong><br><ul>"
|
||||
for ban in bans:
|
||||
result += f"<li><strong>{html.escape(ban["ip"])}</strong><ul>"
|
||||
result += f"<li><strong>Действует до:</strong> <code>{util.date_to_text(ban["expires_at"])}</code></li>"
|
||||
result += f"<li><strong>Причина:</strong> <code>{html.escape(ban["reason"])}</code></li>"
|
||||
result += "</ul></li>"
|
||||
result += "</ul>"
|
||||
await _bot.send_text_to_room(room.room_id, result, is_html=True)
|
||||
|
||||
|
||||
_COMMANDS = {
|
||||
("help", "h", "?"): (_on_cmd_help, "Получить справку"),
|
||||
@@ -184,7 +236,9 @@ _COMMANDS = {
|
||||
("auth", "create", "a", "c"): (_on_cmd_auth, "Создать новый токен"),
|
||||
("deauth", "delete", "d"): (_on_cmd_deauth, "Удалить существующий токен"),
|
||||
("name", "n"): (_on_cmd_name, "Задать (или удалить) имя для токена"),
|
||||
("leave", "l"): (_on_cmd_leave, "Покинуть комнату, в которой получена эта команда"),
|
||||
("ban", "b"): (_on_cmd_ban, "Забанить IP адрес"),
|
||||
("unban", "u"): (_on_cmd_unban, "Разбанить IP адрес"),
|
||||
("bans", "l"): (_on_cmd_bans, "Получить список забаненных IP адресов"),
|
||||
}
|
||||
|
||||
#
|
||||
|
||||
Reference in New Issue
Block a user