Задать вопрос
@Farmila

Как удалять все сообщения от определённого юзера через vkbottle?

Писал с использованием библиотеки vkbottle. Попытался сделать реализацию через кастомные правила, но зашёл в тупик на получении user_id в этом самом кастомном правиле:
class FromSpecificUser(ABCRule[BaseMessageMin]):
    def __init__(self, userIds: list[int], fr_id: BaseMessageMin.from_id) ->bool:
        return userIds.__contains__(fr_id)

Код хендлера.
@bot.on.message(FromSpecificUser([284629059]))
async def delete_eblan(mes:Message):
    await bot.api.messages.delete(peer_id=mes.peer_id, message_ids=mes.message_id, delete_for_all=True)

В идеале конечно сделать переключатель для каждого отдельного пользователя командами с последующим добавлением user_id этого пользователя в какой нибудь список.
Я сделал в таком виде (хотя оно и не будет работать, это заготовка)
usersId_to_delete = []
@bot.on.message(command = "мут")
async def nopasha_handler(message: Message):
    userId_toDelete = message.reply_message.from_id
    usersId_to_delete.append(userId_toDelete)
    return "Удаление сообщений от пользователя начнется после их отправки. Введите /cancel, чтобы отменить."

@bot.on.message(command="анмут")
async def cancel_handler(message: Message):
    userId_toDelete = message.reply_message.from_id
    usersId_to_delete.remove(userId_toDelete)
    return "Удаление сообщений отменено."
  • Вопрос задан
  • 116 просмотров
Подписаться 2 Средний Комментировать
Пригласить эксперта
Ответы на вопрос 1
@Farmila Автор вопроса
Вопрос решился, но не очень по красоте. Я думаю это можно сделать умнее, но не знаю как
@bot.on.message(command = "мут")
async def nopasha_handler(message: Message):
    userId_toDelete = message.reply_message.from_id
    usersId_to_delete.append(userId_toDelete)
    return "Удаление сообщений от пользователя начнется после их отправки. Введите /cancel, чтобы отменить."

@bot.on.message(command="анмут")
async def cancel_handler(message: Message):
    userId_toDelete = message.reply_message.from_id
    usersId_to_delete.remove(userId_toDelete)
    return "Удаление сообщений отменено."


@bot.on.message(from_user = True)
async def delete_eblan(mes:Message):

    if(usersId_to_delete.__contains__(mes.from_id)):

        await bot.api.messages.delete(group_id=mes.group_id, peer_id= 2000000001, cmids=mes.conversation_message_id, delete_for_all=True)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы