ekonda / kutana

The library for developing systems for messengers and social networks
MIT License
72 stars 17 forks source link

Bot commands with alias #55

Closed sasha00123 closed 4 years ago

sasha00123 commented 4 years ago

Commands like /command@BotUsername don't work as expected.

Example code:

@plugin.on_commands(commands=["command"])
async def _(msg, ctx):
    await ctx.reply("Works!!!")

@plugin.on_any_unprocessed_message()
async def _(msg, ctx):
    await ctx.reply("Doesn't work :-(")

Expected Behavior

/command => Works!!! /command@BotUsername => Works!!!

Actual Behavior

/command => Works!!! /command@BotUsername => Doesn't work :-(

Possible Solution

Strip anything after @ in commands.

Steps to Reproduce (for bugs)

  1. Run example code
  2. Write to a bot
  3. Cry

Context

This feature is quite useful if there're multiple bots in one chat.

Your Environment

michaelkryukov commented 4 years ago

Без пробелов вконтакте не рассматривает сообщение '/command@BotUsername' как текст с упоминанием. Поэтому бот и не может вырезать это. Потому что это действительно не упоминание. Некоторые команды могут содержать упоминания других пользователей, поэтому вырезать всё после '@' - плохой вариант, да и бот может работать с командами и аргументами, которые содержат символ '@'.

Для телеграмма этот функционал не реализован, хотя было бы неплохо. Но и там ситуация с упоминания будет аналогичная.

Не похоже, чтобы в поведении, приведённым в пример, было что-то не так. Всё правильно. Особенно это понятно из-за того, что если бот получает только сообщения с упоминаниями, он не будет получать сообщения из примера. Да и вроде случайно такое написать не получится - чтобы появился список с вариантами упоминания, надо ставить проблема (для мобильных клиентов и браузера)

sasha00123 commented 4 years ago

В Telegram бот даже при включенном Group Privacy получает уведомления о команде ему. В других библиотеках, которые я использовал, данная фича работает корректно.

Во ВКонтакте это может быть полезно если нескольким ботам в беседе открыт доступ ко всем сообщениям.

michaelkryukov commented 4 years ago

Есть примеры? Боты всегда получают сообщения, в которых их тэгают, я это и написал. Но в сообщение /command@BotUsername нет тэга бота. В сообщении /command @BotUsername тэг есть, и это будет работать. Никто ведь не будет вручную писать тэг бота полностью. А меню с вариантами тэгов не появится в случае с /command@BotUsername, поэтому случайно так не написать. Ни с телефона, ни с браузерной версии

sasha00123 commented 4 years ago

Соглашусь, в ВК такой функционал не особо удобен.

А вот в Telegram, когда несколько ботов с одинаковыми командами, он автоматически предлагает использовать подобный синтаксис. Test

Вот, к примеру, реализация из python-telegram-bot:

https://github.com/python-telegram-bot/python-telegram-bot/blob/8406889179d3618fd4a9f89b3fed9279603169e0/telegram/ext/commandhandler.py#L171

michaelkryukov commented 4 years ago

Действительно. Когда буду добавлять функционал с вырезанием упоминания в телеграмм - учту этот момент 👌