如何在嵌入 discord.py 中将长字段作为页面发送?
Posted
技术标签:
【中文标题】如何在嵌入 discord.py 中将长字段作为页面发送?【英文标题】:How to send long fields as pages in embed discord.py? 【发布时间】:2021-02-22 11:19:50 【问题描述】:例如这里的代码,它可以工作,但有一些名称,例如https://api.ashcon.app/mojang/v2/user/TonTon70 太长并给出此错误“长度必须为 1024 或更少” 所以我看到一些机器人将长字段作为带有左右箭头的页面发送
import discord
from discord.ext import commands
import requests
import json
from tabulate import tabulate
@client.command()
async def namehistory(ctx,*username):
async with ctx.typing():
embed = discord.Embed(
discription = "discription",
color = discord.Color.green()
)
if not username:
embed.add_field(name="Name History", value="Username not supplied!", inline=False)
await ctx.send(embed=embed)
return
nurl = "https://api.ashcon.app/mojang/v2/user/" + username[0]
nr = requests.get(url=nurl)
data = nr.json()
if "username" in data and data.get("username") != 'null':
nhistory = data['username_history']
nhistory = tabulate(nhistory,headers="keys")
embed.add_field(name="Name History", value=f"```nhistory```", inline=False)
await ctx.send(embed=embed)
else:
await ctx.send("Wrong username!")
【问题讨论】:
嵌入字段本身有 1024 个字符的限制(您可以在 discord.com/developers/docs 的某处找到限制)。您应该尝试将它们拆分为多个字段或发送多条消息 【参考方案1】:嵌入中的“页面”实际上只是带有message reaction collectors 的单独嵌入。消息反应收集器是在用户对消息做出反应时触发的事件。要了解如何使用消息反应收集器,请查看this question:
embed_message = msg.channel.send(your_embed) # send the first page embed
embed_user = msg.author # get the msg user
await embed_message.add_reaction("⬅️") # send the page back button
await embed_message.add_reaction("➡️") # send the page next button
await asyncio.sleep(30) # user has 30 seconds to react to a msg, you can change the timings. Also don't forget to import asyncio
embed_message = await embed_message.channel.fetch_message(vote_msg.id) # after waiting 30 seconds, get the reactions for the msg
现在,反应信息在embed_message
。您可以使用if
语句来读取选择的反应。另外,不要忘记通过将其与embed_user
进行比较来检查该反应是否来自正确的用户。如果您需要这方面的帮助,请随时查看documentation
for reaction in embed_message: # embed_message returns a list
if reaction.users().flatten()[embed_message.index(reaction)] == embed_user: # test if the correct user reacted before performing checks
if reaction.emoji == "⬅️":
# code to send the previous page embed...
elif reaction.emoji == "➡️":
# code to send the next page embed...
祝你的机器人好运!
【讨论】:
以上是关于如何在嵌入 discord.py 中将长字段作为页面发送?的主要内容,如果未能解决你的问题,请参考以下文章
Discord.py 如何从不和谐消息中读取 int 并将其作为变量发送到嵌入中
不和谐.py |使用嵌入时,如何使用 for 循环生成变量的字段值?