【问题标题】:How To Reply To A Message Sent By The Bot Itself如何回复机器人本身发送的消息
【发布时间】:2022-01-26 05:21:35
【问题描述】:

我希望机器人通过说“此消息现在处于非活动状态”来回复其帮助消息。

代码如下:

mm = await message.send(embed=embed1)
    await mm.add_reaction("1️⃣")
    await mm.add_reaction("2️⃣")
    await mm.add_reaction("3️⃣")
    try:
        while True:
            reaction, user = await bot.wait_for("reaction_add",check=check,timeout=10)
            if str(reaction.emoji) == "1️⃣":
                await mm.edit(embed=embed1)
            elif str(reaction.emoji) == "2️⃣":
                await mm.edit(embed=embedZ)
            elif str(reaction.emoji) == "3️⃣":
                await mm.edit(embed=embed3)
    except asyncio.TimeoutError:
        await mm.reply('...')

错误:'message' object has no attribute called 'reply'

【问题讨论】:

    标签: python discord discord.py message


    【解决方案1】:

    你可以这样做:

    import discord
    import os
    from discord.ext import commands
    
    bot = commands.Bot(command_prefix="!", help_command=None)
    
    
    @bot.command()
    async def help(ctx):
        sent_msg = await ctx.send("An great help command")
        await sent_msg.reply("this message is now inactive")
    
    
    bot.run(os.getenv("DISCORD_TOKEN"))
    

    这将导致: Bot 回复自己的帮助命令

    --- 对新编辑的回答 ---

    我已经做了一个函数来做到这一点。它已从我的旧项目中删除,因此您可以删除不需要的不必要功能:

    import discord
    import os
    import asyncio
    import typing
    from discord.ext import commands
    
    bot = commands.Bot(command_prefix=">")
    
    @bot.event
    async def on_ready():
        print(f"Sucessfully logged in as {bot.user}")
    
    async def paginate(
        ctx: discord.ext.commands.context.Context,
        *embed_pages: typing.Union[discord.Embed, list[discord.Embed]],
        content=None,
        overwrite_footer=True,
        timeout=None,
    ):
    
        if isinstance(embed_pages[0], list):
            embed_pages = embed_pages[0]
    
        every_embed = list()
        if overwrite_footer:
            for index, each_embed in enumerate(embed_pages):
                each_embed.remove_footer()
                each_embed.set_footer(text=f"Page {index + 1} of {len(embed_pages)}")
                every_embed.append(each_embed)
        else:
            every_embed = embed_pages[:]
    
        sent_embed = await ctx.send(
            content=content, embed=every_embed[0]
        )  # Send the first page
        page_index = 0  # Set the starting index
    
        reactions = ["1️⃣", "2️⃣", "3️⃣"]
        for each_reaction in reactions:
            await sent_embed.add_reaction(each_reaction)
    
        while True:
            try:
                payload = await bot.wait_for(
                    "raw_reaction_add",
                    check=lambda payload: payload.message_id == sent_embed.id
                    and not payload.member == bot.user
                    and payload.member.id
                    == ctx.author.id,  # Do this if you want it to be author-only
                    timeout=timeout,
                )
            except asyncio.TimeoutError:
                # timeout has been hit
                await sent_embed.reply("This message is now inactive")
                try:
                    await sent_embed.clear_reactions()
                except discord.Forbidden:
                    # No perms
                    pass
                return
            else:
                try:
                    await sent_embed.remove_reaction(payload.emoji, payload.member)
                except discord.Forbidden:
                    # Bot does not have permission
                    pass
    
                if (
                    str(payload.emoji.name) not in reactions
                ):  # Some user reacted with something else
                    pass
    
                elif str(payload.emoji.name) == reactions[0]:  # One
                    page_index = 0
                    await sent_embed.edit(embed=every_embed[page_index], content=content)
    
                elif str(payload.emoji.name) == reactions[1]: # Two
                    page_index = 1
                    await sent_embed.edit(embed=every_embed[page_index], content=content)
    
                else:
                    page_index = 2
                    await sent_embed.edit(embed=every_embed[page_index], content=content)
    
    @bot.command(aliases=["start",])
    async def start_pages(ctx):
        
        await paginate(ctx, discord.Embed(title="Abc", description="sdknfe"),
        discord.Embed(title="idk", description="something else"),
        discord.Embed(title='(¬_¬")', description="We really need 3 pages"),
        timeout=10)
    
        
    bot.run(os.getenv("DISCORD_TOKEN"))
    

    此代码将导致this

    【讨论】:

    • 它不能正常工作
    • 您是否遇到任何错误?如果是,请提供。 @BotBoi345
    • 'message' 对象没有名为 'reply' 的属性
    • discord.Message 确实有一个属性 reply。如果您对上述代码进行了任何更改,您也可以提供吗?另外,您使用的是discord.py 的哪个分支? (如pycord、nextcord、disnake 等)
    • 我是新的,所以我不知道我使用的是哪个叉子
    猜你喜欢
    • 2018-06-03
    • 2022-12-01
    • 1970-01-01
    • 2022-01-03
    • 1970-01-01
    • 2019-10-30
    • 2021-08-19
    • 2021-01-26
    • 1970-01-01
    相关资源
    最近更新 更多