Добавлено приветствие новых участников.
This commit is contained in:
parent
432233b29d
commit
aa63b2a374
2 changed files with 78 additions and 1 deletions
77
bot.py
77
bot.py
|
|
@ -2,7 +2,6 @@ import asyncio
|
||||||
import calendar
|
import calendar
|
||||||
import datetime
|
import datetime
|
||||||
import time
|
import time
|
||||||
from typing import Optional
|
|
||||||
|
|
||||||
from vkbottle.bot import Bot, Message
|
from vkbottle.bot import Bot, Message
|
||||||
from vkbottle_types.objects import MessagesGetConversationMembers
|
from vkbottle_types.objects import MessagesGetConversationMembers
|
||||||
|
|
@ -49,6 +48,8 @@ def create_user_if_not_exists(chat_id: str, user_id: str):
|
||||||
MESSAGE_CHAT_NOT_ACTIVE = 'Извините, но я пока не работаю в этом чате.'
|
MESSAGE_CHAT_NOT_ACTIVE = 'Извините, но я пока не работаю в этом чате.'
|
||||||
MESSAGE_PERMISSION_DENIED = 'Извините, но о таком меня может попросить только администратор чата.'
|
MESSAGE_PERMISSION_DENIED = 'Извините, но о таком меня может попросить только администратор чата.'
|
||||||
MESSAGE_NEED_REPLY = 'Извините, но эту команду нужно вызывать в ответном сообщении.'
|
MESSAGE_NEED_REPLY = 'Извините, но эту команду нужно вызывать в ответном сообщении.'
|
||||||
|
MESSAGE_DEFAULT_GREETING_JOIN = 'Добро пожаловать, {name}!'
|
||||||
|
MESSAGE_DEFAULT_GREETING_REJOIN = 'С возвращением, {name}!'
|
||||||
|
|
||||||
|
|
||||||
@bot.on.chat_message(text="!старт")
|
@bot.on.chat_message(text="!старт")
|
||||||
|
|
@ -73,6 +74,48 @@ async def start_handler(message: Message):
|
||||||
await message.answer('Готова к работе!')
|
await message.answer('Готова к работе!')
|
||||||
|
|
||||||
|
|
||||||
|
@bot.on.chat_message(text="!приветствие")
|
||||||
|
async def set_greeting_join_handler(message: Message):
|
||||||
|
chat_id = message.peer_id
|
||||||
|
chat = create_chat_if_not_exists(chat_id)
|
||||||
|
if chat['active'] == 0:
|
||||||
|
await message.answer(MESSAGE_CHAT_NOT_ACTIVE)
|
||||||
|
return
|
||||||
|
|
||||||
|
chat_members = await bot.api.messages.get_conversation_members(peer_id=chat_id, extended=False)
|
||||||
|
if not vk_user_is_admin(message.from_id, chat_members):
|
||||||
|
await message.answer(MESSAGE_PERMISSION_DENIED)
|
||||||
|
return
|
||||||
|
|
||||||
|
if message.reply_message is None:
|
||||||
|
await message.answer(MESSAGE_NEED_REPLY)
|
||||||
|
return
|
||||||
|
|
||||||
|
database.DB.chat_update(chat_id, greeting_join=message.reply_message.text)
|
||||||
|
await message.answer('Приветствие изменено.')
|
||||||
|
|
||||||
|
|
||||||
|
@bot.on.chat_message(text="!возвращение")
|
||||||
|
async def set_greeting_rejoin_handler(message: Message):
|
||||||
|
chat_id = message.peer_id
|
||||||
|
chat = create_chat_if_not_exists(chat_id)
|
||||||
|
if chat['active'] == 0:
|
||||||
|
await message.answer(MESSAGE_CHAT_NOT_ACTIVE)
|
||||||
|
return
|
||||||
|
|
||||||
|
chat_members = await bot.api.messages.get_conversation_members(peer_id=chat_id, extended=False)
|
||||||
|
if not vk_user_is_admin(message.from_id, chat_members):
|
||||||
|
await message.answer(MESSAGE_PERMISSION_DENIED)
|
||||||
|
return
|
||||||
|
|
||||||
|
if message.reply_message is None:
|
||||||
|
await message.answer(MESSAGE_NEED_REPLY)
|
||||||
|
return
|
||||||
|
|
||||||
|
database.DB.chat_update(chat_id, greeting_rejoin=message.reply_message.text)
|
||||||
|
await message.answer('Приветствие при возвращении изменено.')
|
||||||
|
|
||||||
|
|
||||||
@bot.on.chat_message(text="!предупреждение")
|
@bot.on.chat_message(text="!предупреждение")
|
||||||
async def warning_handler(message: Message):
|
async def warning_handler(message: Message):
|
||||||
chat_id = message.peer_id
|
chat_id = message.peer_id
|
||||||
|
|
@ -225,6 +268,34 @@ async def silent_handler(message: Message):
|
||||||
await message.answer(response)
|
await message.answer(response)
|
||||||
|
|
||||||
|
|
||||||
|
@bot.on.chat_message(action=['chat_invite_user', 'chat_invite_user_by_link'])
|
||||||
|
async def user_join_handler(message: Message):
|
||||||
|
chat_id = message.peer_id
|
||||||
|
chat = create_chat_if_not_exists(chat_id)
|
||||||
|
if chat['active'] == 0:
|
||||||
|
return
|
||||||
|
|
||||||
|
if message.action.type == 'chat_invite_user_by_link':
|
||||||
|
user_id = message.from_id
|
||||||
|
first_join = True
|
||||||
|
else:
|
||||||
|
user_id = message.action.member_id
|
||||||
|
first_join = (user_id != message.from_id)
|
||||||
|
|
||||||
|
user_info = (await bot.api.users.get(user_ids=[user_id]))[0]
|
||||||
|
|
||||||
|
if user_id < 0:
|
||||||
|
return
|
||||||
|
|
||||||
|
if first_join:
|
||||||
|
response = chat['greeting_join'] or MESSAGE_DEFAULT_GREETING_JOIN
|
||||||
|
else:
|
||||||
|
response = chat['greeting_rejoin'] or MESSAGE_DEFAULT_GREETING_REJOIN
|
||||||
|
|
||||||
|
response = response.format(name=f'@id{user_id} ({user_info.first_name})')
|
||||||
|
await message.answer(response)
|
||||||
|
|
||||||
|
|
||||||
@bot.on.chat_message()
|
@bot.on.chat_message()
|
||||||
async def any_message_handler(message: Message):
|
async def any_message_handler(message: Message):
|
||||||
chat_id = message.peer_id
|
chat_id = message.peer_id
|
||||||
|
|
@ -236,6 +307,10 @@ async def any_message_handler(message: Message):
|
||||||
if message.from_id < 0:
|
if message.from_id < 0:
|
||||||
return
|
return
|
||||||
|
|
||||||
|
# Не учитывать служебные сообщения
|
||||||
|
if message.action is not None:
|
||||||
|
return
|
||||||
|
|
||||||
user_id = message.from_id
|
user_id = message.from_id
|
||||||
create_user_if_not_exists(chat_id, user_id)
|
create_user_if_not_exists(chat_id, user_id)
|
||||||
database.DB.user_set_last_message(chat_id, user_id, posix_time())
|
database.DB.user_set_last_message(chat_id, user_id, posix_time())
|
||||||
|
|
|
||||||
|
|
@ -12,6 +12,8 @@ class Database:
|
||||||
CREATE TABLE IF NOT EXISTS chats (
|
CREATE TABLE IF NOT EXISTS chats (
|
||||||
"id" INTEGER,
|
"id" INTEGER,
|
||||||
"active" INTEGER NOT NULL DEFAULT 0,
|
"active" INTEGER NOT NULL DEFAULT 0,
|
||||||
|
"greeting_join" TEXT,
|
||||||
|
"greeting_rejoin" TEXT,
|
||||||
PRIMARY KEY("id"))
|
PRIMARY KEY("id"))
|
||||||
""")
|
""")
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue