我做了很多工作,通过 JavaScript 和 Discord.js 使用 Discord API 创建 Discord 机器人。
我正在尝试使用 python 创建我的第一个不和谐机器人,通过discord.py使用discord api并通过requests.py发送请求。
我的目标是检查网站上的状态代码,当发送包含“状态代码”的消息时,它将在嵌入中回复网站的状态代码。
这是我执行此操作的代码:
import discord
import requests
r = requests.get('redactedurl')
test = r.status_code
class MyClient(discord.Client):
async def on_ready(self):
print('Logged on as {0}!'.format(self.user))
async def on_message(self, message):
if (message.channel.id == redacted):
if "status code" in message.content:
print('Message from {0.author}: {0.content}'.format(message))
embed = discord.Embed(color=0x00ff00)
embed.title = "test"
embed.description = '**Status Code:** {r.status_code}'
await message.channel.send(embed=embed)
client = MyClient()
client.run('redacted')
以下是我希望有人能回答来帮助我的问题列表:)
正如您在这里看到的:https://gyazo.com/f6ae7082486cade72389534a05655fec,这只是在嵌入中发送“{r.status_code}”,而不是实际的状态代码,我做错了什么?
当我在大括号中看到 0 时,这是什么意思?例如,有人可以向我解释“('以{0}登录!'.format(self.user))”吗?由于我是 python 和discord.py 的新手,所以我对整行感到困惑。我知道结果是什么,但请原谅我的无知,这一切有必要吗?
在“send(embed=embed)”中,为什么我不能只放send(embed)?
最后,我还能做些什么来改进代码吗?
如果您能提供帮助,非常感谢!
在设置嵌入描述的行中,将
r.status_code
作为字符串而不是它包含的值输出。试试embed.description = '**Status Code:** {0}'.format(r.status_code)
0 类似于应该存在的值的索引。例如,
'{1}'.format(10, 20)
将打印出索引 1 处的值,在本例中为 20。当您使用
send(embed)
时,机器人最终将以字符串形式发送嵌入,这看起来非常不合适,如果您尝试发送它,您就会明白我的意思。在这种情况下,我们必须指定要将值分配给哪个参数。此函数接受 kwargs
,它们是关键字参数,在本例中,embed 是此 kwargs
函数中的 send()
之一。此函数也接受其他 kwargs
以及 content, tts, delete_after, etc.
它都已记录。您可以通过传入
kwargs
来简化嵌入的创建,例如:discord.Embed(title='whatever title', color='whatever color')
如果您查看文档,discord.Embed()
可以支持更多参数。这里是文档的链接:https://discordpy.readthedocs.io/en/latest/index.html 如果您搜索
TextChannel
,并查找 send()
函数,您可以找到更多受支持的参数以及 discord.Embed()
。
好的,列出你的问题清单:
embed.description = f'**Status Code:** {r.status_code}'
或者,如果您想使用一致的方式格式化字符串:
embed.description = '**Status Code:** {0}'.format(r.status_code)
embed
变量并将其作为 content
变量传递到 send 中。从而将其作为普通消息发送而不是嵌入它。这是一个例子!
import discord
client = commands.Bot(command_prefix = '~')
@client.command()
async def embed(ctx):
embed=discord.Embed(title="Hello!",description="Im a embed text!")
await ctx.send(embed=embed)
client.run("TOKEN")
import discord
from discord.ext import commands
client = commands.Bot(command_prefix='>')
@client.event
async def on_ready():
print("Log : "+str(client.user))
@client.command()
async def embed(ctx):
em = discord.Embed(color=discord.Color.from_rgb(0,0,255),title="Your title",description="Your description")
await ctx.send(embed=em)
client.run("token")
embed=discord.Embed(title="hello", url="https://discord.com/channels/###/###/###")
embed.set_author(name="me", url="https://discord.com/api/webhooks/###/###", icon_url="https://discord.com/channels/###/###/###")
await ctx.send(embed=embed)