Как мне заставить моего бота раздора повторить часть того, что я говорю? - PullRequest
0 голосов
/ 12 февраля 2019

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

@client.event
async def on_message(message):
    if message.author != client.user and message.content[:9] == "-chastise":
        if message.content[10:] != "@Johnny Wobble#1085":
            print("confirmed stage 2")
            responses = [
                f"Were you being bad {message.content[10:]}? or are you just slow?",
                f"How many time have I told you {message.content[10:]}! Don't be slow and eat your cereal!",
                f"When I looked up a picture of bad people who don't do their homework, I see a p"
                f"icture of you! {message.content[10:]}"
            ]
            await client.delete_message(message)
            await client.send_message(message.channel, random.choice(responses))
        else:
            print("confirmed stage 3")
            await client.send_message(message.channel, f"Ah, I see you {message.author.mention}, trying to turn me agai"
            f"nst my master eh? Well I say no! I cannot believe you would think that I would ever do that to the all-po"
            f"werful Max (Gordon)!")

| что должно произойти |

(любой): -chastise @ personxyz # 1234

(бот): Вы былиплохой @ personxyz # 1234?или вы просто медлительны?

[затем удаляет первое сообщение, но я думаю, что я уже понял это]

1 Ответ

0 голосов
/ 12 февраля 2019

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

Вы можете сделать message.mentions, чтобы получить список упоминаний в текущем сообщении (пусто, если естьбез упоминаний).

В вашем коде вы можете сделать:

# After checking there is at least one mention in the message.

# Fetch the first mention in the list, get a string that can mention the user.
mentionUserStr = message.mentions[0].mention

# Fill in the mentions inside the responses
responses = [
    f"Were you being bad {mentionUserStr}? or are you just slow?",
    f"How many time have I told you {mentionUserStr}! Don't be slow and eat your cereal!",
    f"When I looked up a picture of bad people who don't do their homework, I see a p"
    f"icture of you! {mentionUserStr}"
]

# stuff

Если вам нужна часть фактического сообщения пользователя, обрежьте его, назначьте его переменной и поместитесоответственно в массиве строк, как я делал выше.

Наконец,

await client.delete_message(message)
await client.send_message(message.channel, random.choice(responses))

Обратите внимание, как вы пытаетесь получить канал сообщения после его удаления, хотя в документе ничего не сказаночто message будет нулевым после удаления, но для безопасности:

await client.send_message(message.channel, random.choice(responses))
await client.delete_message(message)

Сначала используйте сообщение перед удалением.

Также, возможно, вы захотите проверить, есть ли у ботадостаточно прав для удаления сообщений других пользователей, прежде чем пытаться это сделать.

...