Как мне избежать @everyone в discord.py? - PullRequest
1 голос
/ 16 июня 2020

Я разрабатываю бота Discord в Python, который выводит текст на основе ввода пользователя. Я хочу, чтобы пользователи не говорили @everyone@here), что могло бы пометить и раздражать всех.

Я пробовал использовать \@everyone, который в отличие от @everyone не делает сам текст синим, но все равно запускает эхо-запрос и выделяет строку желтым . Это происходит не только тогда, когда я отправляю сообщение с ботом, но и если я использую Discord напрямую.

1 Ответ

2 голосов
/ 16 июня 2020

Решение, которое я использовал, - вставить пробел нулевой ширины после '@'. Это не изменит внешний вид текста («нулевой ширины»), но дополнительный символ предотвращает пинг. Он имеет код юникода 200b (в шестнадцатеричном формате):

message_str = message_str.replace('@', '@​\u200b') 

Однако сама библиотека discord.py имеет escape_mentions для этой цели:

message_str = discord.utils.escape_mentions(message_str)

что реализовано практически идентично :

def escape_mentions(text):
    return re.sub(r'@(everyone|here|[!&]?[0-9]{17,21})', '@\u200b\\1', text)
...