@LxneSamurai

Как сделать «реакцию» с упоминанием пользователя и без?

Доброго времени суток.
Работаю над ботом для дискорда. Решил взяться за реакции/действия с гифками (пример на скриншоте)
img src="https://habrastorage.org/webt/62/3d/7d/623d7da9e1e..." alt="image"/>

Решил добавить возможность взаимодействий с пользователями, но и оставить возможность
воспользоваться "действием" без упоминания какого-либо юзера.
Столкнулся с проблемой, что работает либо без написаний {member.mention} и member : discord.Member (т.е,
"действие" будет выполняться как на скриншоте без упоминания юзера), либо с вышеперечисленным, но
тогда уже не будет возможности совершить "действие" в одниочку.

Писал реакции через эмбеды.

Вот сам код:
#гифки для "действий"
smoke_gifs = ['https://c.tenor.com/GbIdim1VGIcAAAAC/cowboy-bebop.gif', 'https://c.tenor.com/4AlXS_jcSfEAAAAC/cigarette-smoke.gif',
'https://c.tenor.com/e6fnyOkyodMAAAAC/nana-anime.gif', 'https://c.tenor.com/dNPpY-4GkAQAAAAC/smoking-cowboy-bebop.gif']

@bot.command()
async def smoke(ctx, member: discord.Member):
   #emb - "действие" без участия и упоминания пользователя
    emb = discord.Embed(title="Реакция: курить",description=f"{ctx.author.mention} курит.",timestamp=ctx.message.created_at, colour=discord.Color.darker_grey())
    emb.set_image(url=(random.choice(smoke_gifs)))
    emb.set_footer(text="{}".format(ctx.author.name), icon_url=ctx.author.avatar_url)
   
   #emb2 - "действие" совместно с пользователем
    emb2 = discord.Embed(title="Реакция: курить",description=f"{ctx.author.mention} курит вместе с {member.mention}",timestamp=ctx.message.created_at, colour=discord.Color.darker_grey())
    emb2.set_image(url=(random.choice(smoke_gifs)))
    emb2.set_footer(text="{}".format(ctx.author.name), icon_url=ctx.author.avatar_url)
   
    if member.mention in ctx.message:
      await ctx.send(embed=emb2)
    else:
      await ctx.send(embed=emb)
  • Вопрос задан
  • 390 просмотров
Решения вопроса 1
Vindicar
@Vindicar
RTFM!
import typing

async def smoke(ctx, member: typing.Optional[discord.Member] = None):


И внутри обработчика проверяешь if member is not None. Если выполнилось, значит, участник указан.
Ну и не забудь почитать документацию, там описано, какие конструкции в аргументах понимает discord.py.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы