 |

21.02.2023, 19:46
|
|
Участник форума
Регистрация: 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'
]
)
не обращайте внимание на никнеймы... локальные приколы, ничего более
|
|
|

21.02.2023, 21:17
|
|
Флудер
Регистрация: 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
)
|
|
|

21.02.2023, 21:39
|
|
Участник форума
Регистрация: 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
)
Да, но тогда бот будет игнорировать любые сообщение начинающиеся с '#' даже когда они не являются командой
|
|
|

22.02.2023, 00:38
|
|
Флудер
Регистрация: 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
)
Ты можешь через
добавить в проверке префикс свой. Ну или же вручную в массиве ставить.
|
|
|

22.02.2023, 05:04
|
|
Участник форума
Регистрация: 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
)
Ты можешь через
добавить в проверке префикс свой. Ну или же вручную в массиве ставить.
Я думал так сделать, но мне не хватило навыков чтобы каждый элемент в массиве соединять с '#'. Думал, что когда будет большое количество функций, то тогда бот будет медленнее работать из за цикла. Все равно спасибо, пожалуй так и сделаю.
|
|
|

20.04.2023, 16:45
|
|
Постоянный
Регистрация: 06.11.2021
Сообщений: 397
С нами:
2378594
Репутация:
48
|
|
Куда проще и эффективнее команды делать через @bot.command()
|
|
|
|
 |
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|