HOME FORUMS MEMBERS RECENT POSTS LOG IN  
× Авторизация
Имя пользователя:
Пароль:
Нет аккаунта? Регистрация
Баннер 1   Баннер 2
НОВЫЕ ТОРГОВАЯ НОВОСТИ ЧАТ
loading...
Скрыть
Вернуться   ANTICHAT > ПРОГРАММИРОВАНИЕ > Общие вопросы программирования
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

  #1  
Старый 21.02.2023, 19:46
histor
Участник форума
Регистрация: 16.11.2020
Сообщений: 192
С нами: 2890228

Репутация: 98
По умолчанию

Проблема в том, что бот на команду "#rand" реагирует не только как на команду, но и как на обычный текст. Мне надо чтобы бот реагировал на команду только как на команду и игнорировал её как текст.

main:





Код:
import
discord
import
random
from
discord
.
ext
import
commands

config
=
{
'token'
:
''
,
'prefix'
:
'#'
,
}
intents
=
discord
.
Intents
.
default
(
)
intents
.
presences
=
True
intents
.
members
=
True
intents
.
message_content
=
True
bot
=
commands
.
Bot
(
command_prefix
=
config
[
'prefix'
]
,
intents
=
intents
)
@bot.command
(
)
async
def
rand
(
ctx
)
:
await
ctx
.
reply
(
random
.
randint
(
0
,
100
)
)
@bot.event
async
def
on_message
(
ctx
)
:
await
bot
.
process_commands
(
ctx
)
if
ctx
.
author
!=
bot
.
user
:
if
ctx
.
channel
.
name
==
"bot-test"
:
await
ctx
.
reply
(
'Ты '
+
ctx
.
channel
.
name
)
bot
.
run
(
config
[
'token'
]
)




не обращайте внимание на никнеймы... локальные приколы, ничего более
 
Ответить с цитированием

  #2  
Старый 21.02.2023, 21:17
Dmitriy Makarov
Флудер
Регистрация: 29.04.2017
Сообщений: 2,512
С нами: 4757849

Репутация: 183


По умолчанию

Как вариант, можно в on_message добавить проверку на то, что текст не начинается с префикса для команд.

Python:





Код:
if
ctx
.
author
!=
bot
.
user
:
if
ctx
.
channel
.
name
==
"bot-test"
:
if
not
ctx
.
content
.
startswith
(
config
[
"prefix"
]
)
:
await
ctx
.
reply
(
'Ты '
+
ctx
.
channel
.
name
)
 
Ответить с цитированием

  #3  
Старый 21.02.2023, 21:39
histor
Участник форума
Регистрация: 16.11.2020
Сообщений: 192
С нами: 2890228

Репутация: 98
По умолчанию

Цитата:
Сообщение от Dmitriy Makarov  

Как вариант, можно в on_message добавить проверку на то, что текст не начинается с префикса для команд.

Python:





Код:
if
ctx
.
author
!=
bot
.
user
:
if
ctx
.
channel
.
name
==
"bot-test"
:
if
not
ctx
.
content
.
startswith
(
config
[
"prefix"
]
)
:
await
ctx
.
reply
(
'Ты '
+
ctx
.
channel
.
name
)

Да, но тогда бот будет игнорировать любые сообщение начинающиеся с '#' даже когда они не являются командой
 
Ответить с цитированием

  #4  
Старый 22.02.2023, 00:38
Dmitriy Makarov
Флудер
Регистрация: 29.04.2017
Сообщений: 2,512
С нами: 4757849

Репутация: 183


По умолчанию

Цитата:
Сообщение от histor  

Да, но тогда бот будет игнорировать любые сообщение начинающиеся с '#' даже когда они не являются командой
Ну создай список с командами своими и ищи совпадения в чате. 🙂

Python:





Код:
# Где-то в начале
cmds
=
[
"cmd1"
,
"cmd2"
,
"cmd3"
,
]
# on_message
if
not
ctx
.
content
in
cmds
:
await
ctx
.
reply
(
"Ты "
+
ctx
.
channel
.
name
)


Ты можешь через
Код:
string.format
добавить в проверке префикс свой. Ну или же вручную в массиве ставить.
 
Ответить с цитированием

  #5  
Старый 22.02.2023, 05:04
histor
Участник форума
Регистрация: 16.11.2020
Сообщений: 192
С нами: 2890228

Репутация: 98
По умолчанию

Цитата:
Сообщение от Dmitriy Makarov  

Ну создай список с командами своими и ищи совпадения в чате. 🙂

Python:





Код:
# Где-то в начале
cmds
=
[
"cmd1"
,
"cmd2"
,
"cmd3"
,
]
# on_message
if
not
ctx
.
content
in
cmds
:
await
ctx
.
reply
(
"Ты "
+
ctx
.
channel
.
name
)


Ты можешь через
Код:
string.format
добавить в проверке префикс свой. Ну или же вручную в массиве ставить.
Я думал так сделать, но мне не хватило навыков чтобы каждый элемент в массиве соединять с '#'. Думал, что когда будет большое количество функций, то тогда бот будет медленнее работать из за цикла. Все равно спасибо, пожалуй так и сделаю.
 
Ответить с цитированием

  #6  
Старый 20.04.2023, 16:45
riverya4life
Постоянный
Регистрация: 06.11.2021
Сообщений: 397
С нами: 2378594

Репутация: 48
По умолчанию

Куда проще и эффективнее команды делать через @bot.command()
 
Ответить с цитированием
Ответ





Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT ™ © 2001- Antichat Kft.