Discord py, прочитать сообщение пользователя
суть такова. Человек отправляет сообщение, к примеру "4". Затем бот записывает это значение в переменную, и далее спрашивает, ваша ставка? Далее ему пишут ставку, и опять же добавляет это значение в переменную. Я написал такой код
@client.command(aliases = ['Казино'])
async def casino(message, member: discord.Member = None, amount:int = None):
await message.send('Привет! Ну, что поиграем??. Какое число выпадет?(1-6)?')
time.sleep(10)
ansver = message.content
if re.match(r'[1-6]', ansver):
await message.send('true')
Ошибка выдается, вроде -"content не содержится..." Как мне получить это сообщение? Перепробовал много вариантов, ничего не помогло Видел что реализуют через @client_event async def on_message, но тогда он будет на каждую цифру отвечать, а мне нужно чтобы запускался только через !Казино, спасибо
Ответы (3 шт):
Попробуй уместить это в одну команду, типа "Казино 4" и если что проверку на значение сделать типа такой:
if type(x)==int && 0<x<=6:
#other code
Надеюсь, я вас правильно понял. Пользователь пишет команду со ставкой к примеру 1000:
!Казино 1000
Тогда это будет выглядеть примерно так:
import re
from random import randint
from asyncio import TimeoutError
@client.command(aliases=["Казино"])
async def casino(ctx, amount: int):
def check(m):
return m.author.id == ctx.author.id
await ctx.send('Привет! Ну, что поиграем??. Какое число выпадет?(1-6)?')
try:
# Ожидание ответа от пользователя. timeout - время ожидания.
answer = await client.wait_for("message", check=check, timeout=30)
answer = answer.content
except TimeoutError:
# Если время ожидания вышло.
return await ctx.send('Время вышло.')
await ctx.send(f'Ваша ставка: {amount}')
# Число от 1 до 6
number = randint(1, 6)
if re.match(r'[1-6]', answer):
if number == int(answer):
await ctx.send('Вы угадали!')
else:
return await ctx.send('Вы не угадали.')
else:
return await ctx.send('Нужно указать число!')
Прочитать про функцию wait_for можно в документации.
Постараюсь понятно объяснить. Для того, чтобы совершить ожидание, можете воспользоваться функцией wait_for и записать его в переменную, с которой потом можно делать то, что хочется.
Ниже привожу пример кода:
msg = await bot.wait_for('message', check = lambda m: m.channel == ctx.channel and m.author.id == ctx.author.id)
await ctx.send('Ваше сообщение:', msg.content)