NameError:未定义名称“消息”。 Discord bot(不可重写)

时间:2019-02-11 17:07:41

标签: python python-3.x bots discord discord.py

这是给不和谐的顺便说一句,不是重写。我尝试了每种方法来定义消息。我什至走得太远,不得不重新安装discord.py。我一直在努力解决这个问题一周。我在网上找不到任何信息。我的问题是,当我不在不和谐的频道中并编写“!solodab”(我编写代码时使命令更有趣,我将它们重命名为已完成的代码)而您不在频道中时,它将说“您不在频道中加入一个”,但我不能只删除一条消息。我必须使用

删除至少两条消息
 async for message in client.logs_from(channel, limit=int(2):
     message.append(message)
await client.delete_messages(messages)

我尝试从邮件中删除。但是没有运气,我已经读了官方文档,我只需要写

await client.delete_message(message)

但是当我这样做时,我得到的只是:discord.ext.commands.errors.CommandInvokeError:命令引发了一个异常:NameError:未定义名称'message'

这是此问题的相关代码,如果您需要我发送整个文件,请告诉我。对于那些可以帮助我解决这个问题的人,我将永远负债累累。

bot_prefix = "!"

crew_role = '415914560420315137'

client = Bot(command_prefix=bot_prefix)





client.command(pass_context=True)
async def solodab(context, voice_channel: discord.Channel = None):


server = context.message.server
author = context.message.author

if voice_channel == None:
    voice_channel = author.voice.voice_channel
else:
    try: 
        vc = await client.join_voice_channel(voice_channel)
        await client.say("Håper alle er klare! Nedtelling starter snart, lurer du på noe angående denne kommandoen og hva den gjør. Skriv '!help solodab'\nEller kontakt en i crewet(!crew, for en liste av alle i crewet)")
        # create StreamPlayer
        time.sleep(1)
        player = vc.create_ffmpeg_player('dabb.mp3')
        player.start()
        # disconnect after the player has finished
        print("6 sek til figger's dabber ")
        time.sleep(6)
        player.stop()
        await vc.disconnect()

        channel = context.message.channel
        messages = []
        #async for message in client.logs_from(channel, limit=int(2)):
        #   messages.append(message)
        #await client.delete_messages(messages)

        await client.say("Queuen har nå startet, skriv de tre siste tallene av server id'n så kan du se hvem som er i samme game som deg!")
        time.sleep(2)
        await client.delete_message(message)


    except:

        channel = context.message.channel

        #async for message in client.logs_from(channel, limit=int(2)):
        #   messages.append(message)
        #await client.delete_messages(messages)

        await client.say("Du er ikke i en kanal, join en!" + author.mention)
        time.sleep(1)
        await client.delete_message(message.channel)

        await vc.disconnect()

1 个答案:

答案 0 :(得分:0)

就像帕特里克(Patrick)在评论中提到的那样,尽管有想法,但您没有定义/创建消息。

您可以执行await client.delete_message(context.message)来删除发送到漫游器的消息。
(尽管如果我错了,任何人都可以纠正我,因为我认为context是Message对象本身。)

如果要删除多封邮件,则必须先提取多封邮件,但我未能在文档中找到有关如何提取多封邮件的任何信息。

虽然我发现有用的是purge_from函数调用。
Ctrl + F搜索它,如果它不能将您重定向到该函数)

因此,与其提取多个消息并将其删除,不如使用
await client.purge_from(TargetChannel, NoOfMessagesToDelete)

对其进行简化。

您的TargetChannel最有可能是context.channel,并且NoOfMessagesToDelete介于0到100之间的任何数字。

(与往常一样,请先尝试检查权限,然后再尝试删除它们:v。)