通过`.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(["•<@ (#)>".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.js 将 client.reply 作为嵌入消息发送时出现问题