Вывести переменный вывод в 400 пустом коде сообщения, используя Python - PullRequest
1 голос
/ 08 марта 2019

Проблема:

Я пытаюсь закодировать бота для Discord, чтобы взять переменную и отправить ее в виде сообщения.Например, «a» имеет значение 42, и я хочу, чтобы бот печатал в чате. «Число равно 42 {имя автора}»:

a = 32

if message.content.startswith('!gap'):
    msg = print('a'.format(message))
    await client.send_message(message.channel, msg)

Ошибка:

Ignoring exception in on_message
Traceback (most recent call last):
  File "C:\Users\trevo\AppData\Local\Programs\Python\Python36-32\lib\site-packages\discord\client.py", line 307, in _run_event
    yield from getattr(self, event)(*args, **kwargs)
  File "C:\Users\trevo\Desktop\dcbot\reply.py", line 16, in on_message
    await client.send_message(message.channel, msg)
  File "C:\Users\trevo\AppData\Local\Programs\Python\Python36-32\lib\site-packages\discord\client.py", line 1152, in send_message
    data = yield from self.http.send_message(channel_id, content, guild_id=guild_id, tts=tts, embed=embed)
  File "C:\Users\trevo\AppData\Local\Programs\Python\Python36-32\lib\site-packages\discord\http.py", line 200, in request
    raise HTTPException(r, data)
discord.errors.HTTPException: BAD REQUEST (status code: 400): Cannot send an empty message

Я ценю объяснения!

Ответы [ 2 ]

1 голос
/ 08 марта 2019

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

В следующем коде выводится число, которое вы вводите после ! Gap

from discord.ext import commands

client = commands.Bot(command_prefix='!')

@client.command(pass_context=True)
async def gap(ctx, number):
    await client.say(f"{ctx.author.mention} said the number {number}")

client.run("token")

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

1 голос
/ 08 марта 2019

Вы ожидаете, что msg будет строкой, но если вы попробуете это:

>>> msg = print("anything at all")
>>> repr(msg)
None

Просто удалите вызов print.

...