通过`.join`格式化Discord消息时出现问题

Posted

技术标签:

【中文标题】通过`.join`格式化Discord消息时出现问题【英文标题】:Trouble while formatting a Discord message via `.join` 【发布时间】:2019-01-07 08:54:45 【问题描述】:

我想让我的消息看起来像:

禁止名单:

• 用户 1 ID(用户 1 名称#用户 1 鉴别器)

• 用户 2 ID(用户 2 名称#用户 2 鉴别器)

• 用户 3 ID(用户 3 名称#用户 3 鉴别器)

我已经在列表格式中获得了用户的 ID、名称和鉴别器,我只是不知道如何让它正确格式化。我一直在搞乱.format.join 有一段时间了,但是如果没有每条数据都在新行上,我不知道如何以正确的顺序获取它。

作为参考,这是我的代码现在的样子:

userid = ['User 1 ID', 'User 2 ID', 'User 3 ID']
name = ['User 1 Name', 'User 2 Name', 'User 3 Name']
discriminator = ['User 1 Disc', 'User 2 Disc', 'User 3 Disc']

total = list(chain.from_iterable(zip(userid, name, discriminator)))


await client.send_message(message.channel, "**Ban List:** \n •<@>".format(">\n• <@".join(total)))

这个输出:

禁止名单:

• @用户 1 ID

• @用户 2 ID

• @用户 2 ID

【问题讨论】:

【参考方案1】:

你可以试试这个代码:

userid = ['User 1 ID', 'User 2 ID', 'User 3 ID']
name = ['User 1 Name', 'User 2 Name', 'User 3 Name']
discriminator = ['User 1 Disc', 'User 2 Disc', 'User 3 Disc']

total = zip(userid, name, discriminator)

await client.send_message(message.channel, "**Ban List:** \n".format("\n".join(["• ".format(" ".join(list(item))) for item in total])))

【讨论】:

试过了,但它只是发送相同的输出,但它们之间有空格。 可以把最后一句替换成如下:await client.send_message(message.channel, "**Ban List:** \n".format("\n".join(["•&lt;@ (#)&gt;".format(*item) for item in total])))【参考方案2】:

试试下面这段代码,它不是单行代码,但我想它更具可读性

userid = ['User 1 ID', 'User 2 ID', 'User 3 ID']
name = ['User 1 Name', 'User 2 Name', 'User 3 Name']
discriminator = ['User 1 Disc', 'User 2 Disc', 'User 3 Disc']

total = list((zip(userid, name, discriminator)))

# reformat the code into the desired formatting
pretty_list = set()
for details in total:
    data = "•<@ (#)>".format(details[0], details[1], details[2]) 
    pretty_list.add(data)

# debug print below
# print("**Ban list:** \n".format("\n".join(pretty_list)))

await client.send_message(message.channel, "**Ban list:** \n".format("\n".join(pretty_list)))

祝你好运:)

【讨论】:

@Pierre.Vriens ,我刚刚更新了代码以提高可读性。假设您要询问输出,它的作用基本上是将pretty_list 中格式正确的项目与换行符(“\n”)连接起来。然后,这个连接的字符串被“粘贴”在 "*Ban list:** \n" 的占位符 内。希望对你有帮助【参考方案3】:

这是一个单行(ish)解决方案:

userid = ['User 1 ID', 'User 2 ID', 'User 3 ID']
name = ['User 1 Name', 'User 2 Name', 'User 3 Name']
discriminator = ['User 1 Disc', 'User 2 Disc', 'User 3 Disc']

#convert [['a1', 'a2'], ['b1', 'b2']] to iter([('a1', 'b1'), ('a2', 'b2')])
total = zip(userid, name, discriminator)

await client.send_message(message.channel, "**Ban List:**\n"
                          + "\n".join("•  (#)".format(*i) for i in total))

输出应该是:

禁止名单:

• 用户 1 ID(用户 1 名称#用户 1 光盘)

• 用户 2 ID(用户 2 名称#用户 2 光盘)

• 用户 3 ID(用户 3 名称#用户 3 光盘)

【讨论】:

以上是关于通过`.join`格式化Discord消息时出现问题的主要内容,如果未能解决你的问题,请参考以下文章

尝试制作 discord.py 级别机器人时出现错误消息

尝试使用 discord.js 将 client.reply 作为嵌入消息发送时出现问题

discord.py - 加入/离开消息错误,不起作用

Discord JS 音乐机器人 - .message.member.voiceChannel.join() 不工作

如何删除 discord.py 中的消息信息?

discord.py 加入消息嵌入未发送