我有一个使用discord的discord机器人。py和mysql,我目前正在每次发送消息时加载公会前缀:
@client.event
async def on_message(message):
cursor = mydb.cursor()
cursor.execute(f"SELECT prefix FROM servers WHERE guild = {message.guild.id}")
prefix = cursor.fetchone()[0]
问题是机器人越来越大,也越来越落后。因此,我想在bot启动时,在on_ready()
事件上加载所有前缀。使用不和谐。js,应该是这样的:
const guildPrefixes = new Map();
client.on('ready', () => {
client.guilds.cache.forEach(guild => {
connection.query(
`SELECT prefix FROM servers WHERE guild = '${guild.id}'`
).then(result => {
guildPrefixes.set(guild.id, result[0][0].prefix);
}).catch(err => console.log(err));
});
});
client.on('message', async (message) => {
const prefix = guildPrefixes.get(message.guild.id);
// code here...
});
我怎么能使用discord.py来做这件事呢?提前感谢。
迭代客户端公会
以下是修订后的代码:
@client.event
async def on_ready():
client.prefixes = {}
for i in client.guilds:
cursor = mydb.cursor()
cursor.execute(f"SELECT prefix FROM servers WHERE guild = {i.id}")
prefix = cursor.fetchone()[0]
client.prefixes[i.id] = prefix
@client.event
async def on_message(m):
prefix = client.prefixes.get(m.guild.id)
# code
我目前正在制作一个discord bot,并希望在服务器加入时在服务器的通道中发送一条消息,这是我到目前为止的代码。 当我运行这段代码时,什么都不会发生。我没有得到任何ERORR或输出。 如果有人能帮忙,那就太棒了。谢谢
我正在学习如何使用python创建一个discord bot,但我在使用这个命令时遇到了问题。我试图做的是踢一个特定的用户,然后使用bot将邀请发送回discord服务器。这是一个愚蠢的想法,但我真的想让它发挥作用。 我特别遇到的问题是如何踢一个特定的用户(带有用户标识),然后将该用户DM。 谢谢! 这里的代码: 这样做的目的是,如果具有适当角色类型的人一个特定的不一致用户id()被踢,机器人会自
每当有人将机器人添加到公会时,它都会向系统通道发送一个带有一点信息的嵌入。 我希望它向邀请机器人的人(使用oauth授权链接的帐户)发送一个相同的消息。问题是,事件只接受1个参数,它没有提供有关使用授权链接将bot添加到guild的人员的任何信息。 有办法做到这一点吗?我是否必须使用“欺骗”方法,比如有一个自定义网站来记录使用邀请的帐户?
我在使用Discord。js创建一个基本的Discord机器人。当bot第一次启动时,我运行获取机器人当前订阅的所有协会的列表。我将其保存到其他程序使用的数据库中。 然而,当人们从他们的公会中添加/删除机器人时,我想保留一个更新的公会列表。我意识到我可以每分钟重新运行,但这似乎效率低下。 当你的机器人被添加到公会和/或频道时,是否有触发的事件?据我所知,事件似乎针对所有已经订阅该公会的用户/机器人
我试图做一个不和谐机器人,它创建一个类别,并为角色和用户设置权限,将用户id作为参数: 其中args是包含命令、类别名称和用户ID的字符串数组。用法应为: 我对此有一些问题,因为就像机器人看不到服务器的成员,他唯一可以添加的用户是我,如果在第一个参数中指定服务器的所有者(在我的例子中是000000)。如果我把别人的ID,机器人不会在类别中添加该用户的权限。我发现,也许机器人看不到其他用户,事实上,
我是一个初学者程序员(或者在我看来是这样),我需要帮助在音乐机器人中实现一个队列。 目前,只有当队列中有一首歌时,队列才能正常工作。如果有更多的歌曲,那么递归开始(在=wait serverQueue(语音,消息)之后从def play开始并等待play(queue.pop(0),语音,消息)从队列开始),并且所有歌曲只是跳过。 我试图以不同的方式解决这个问题,例如,引入了第二个变量,但这并没有带