ANTICHAT

ANTICHAT (https://forum.antichat.xyz/index.php)
-   Общие вопросы программирования (https://forum.antichat.xyz/forumdisplay.php?f=206)
-   -   Дискорд бот на питоне реагирует на команду как на текст и как на команду. Как решить эту проблему? (https://forum.antichat.xyz/showthread.php?t=1468839)

histor 21.02.2023 19:46

Проблема в том, что бот на команду "#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'
]
)



https://i.stack.imgur.com/e041d.png

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

Dmitriy Makarov 21.02.2023 21:17

Как вариант, можно в 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
)


histor 21.02.2023 21:39

Цитата:

Сообщение от 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
)



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

Dmitriy Makarov 22.02.2023 00:38

Цитата:

Сообщение от histor

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

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

Python:





Код:

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



Ты можешь через
Код:

string.format
добавить в проверке префикс свой. Ну или же вручную в массиве ставить.

histor 22.02.2023 05:04

Цитата:

Сообщение от Dmitriy Makarov

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

Python:





Код:

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



Ты можешь через
Код:

string.format
добавить в проверке префикс свой. Ну или же вручную в массиве ставить.

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

riverya4life 20.04.2023 16:45

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


Время: 21:02