我正在使用 discord.py 库在 Python 3.6 中开发 Discord 机器人,并且在尝试从我创建的线程向特定通道发送消息时遇到问题。
基本上,我有一些线程监视网站,并且我想调用一个函数(我正在传递给线程),当我注意到网站上的更改时,该函数将消息发送到一个特定的频道。
我最初尝试在client.send_message()没有 async/await 的情况下直接调用但它根本不起作用,所以我编写了发送消息的 async/await 函数(测试它并且它有效)但是我再次从线程调用它时遇到问题,所以我结束了将机器人客户端传递给我的线程并调用self.bot_client.loop.create_task(self.sendmsgfunction(msg)). 这是可行的,但与机器人使用常规@bot.event功能回复消息所需的时间相比,它非常慢(发送消息大约需要 15 秒,而且这可能不是正确的发送方式)。
我已经尝试使用 asyncio 创建一个事件循环,然后调用该函数,但最终还是出现了错误。
有任何想法吗?
目前我使用的是最新版本的Discord.js (v13.1.0)。
我希望能够检测某条消息是否是 DM。我尝试创建一个messageCreate事件并执行 if 语句来检查该通道是否是 DM
client.on('messageCreate', message => {
if (message.channel.type == 'DM') {
console.log('Dm recieved!')
}
})
Run Code Online (Sandbox Code Playgroud)
由于某种原因,这不起作用。所以我不知道会发生什么。
这是我的intents:
[Intents.FLAGS.GUILDS, Intents.FLAGS.GUILD_MESSAGES, Intents.FLAGS.GUILD_MESSAGE_REACTIONS, Intents.FLAGS.DIRECT_MESSAGES]
顺便说一句,该事件确实有效:
client.on('messageCreate', message => {
console.log('Event')
}
Run Code Online (Sandbox Code Playgroud) 运行我的机器人代码时,我在终端中收到此警告:
(节点:6220)DeprecationWarning:不推荐为 MessageEmbed#setFooter 传递字符串。而是传递一个单独的对象。(用于node --trace-deprecation ...显示创建警告的位置)
我想知道您是否可以提供帮助(我什么也没搜索...),我正在学习如何使用discord.js节点,并且我想更改用户昵称(而不是用户名本身)
我的代码是
const Discord = require('discord.js');
const client = new Discord.Client();
client.on('ready', () => {
console.log('I am ready!');
});
client.on('message', message => {
if (message.content.includes('changeNick')) {
client.setNickname({nick: message.content.replace('changeNick ', '')});
}
});
client.login('token');
Run Code Online (Sandbox Code Playgroud) 我一直在制作一个不和谐机器人,并希望让它向特定的"欢迎"频道发送消息.不幸的是,我无法这样做.我试过这个.
const welcomeChannel = bot.channels.get("name", "welcome")
welcomeChannel.sendMessage("Welcome\n"+member.user.username);
Run Code Online (Sandbox Code Playgroud)
但是在这个"welcomeChannel未定义"中.
编辑:
我试过用
const welcomeChannel = bot.channels.get("id", "18NUMBERIDHERE")
welcomeChannel.sendMessage("Welcome\n"+member.user.username);
Run Code Online (Sandbox Code Playgroud)
但奇怪的是,这仍然是未定义的
我的目标是为文本部分着色.我知道我可以使用.sendCode("css","this is my message");哪个会使我的文字变黄但我不希望我的整个文本变成黄色.
也许我可以创建另一个.css文件,然后从我的JavaScript文件中调用它,但由于我对JavaScript缺乏经验,我希望得到一些帮助.我认为这是最快的方法.
有没有办法删除除机器人本身以外的任何人发送的消息,文档似乎表明它是可能的
没有任何适当的权限,您可以删除自己的邮件.但是,要删除其他人的消息,您需要具有相应的权限才能执行此操作.
但我无法找到一种方法来定位消息,以便在on_message事件触发器中执行此操作,我是否遗漏了某些内容,或者这是不可能的?
最近几天,我一直在尝试将用 discord.py 编写的 discord bot 的结构调整为更面向 OOP 的结构(因为放置函数并不理想)。
但我发现这样多的问题,我可以曾经预计,事情是,我想我的所有命令封装到一个单一的类,但我不知道什么装饰使用和如何,我必须继承哪些类。
到目前为止,我已经实现了一个类似于下面的代码,它运行但在执行命令的那一刻它抛出这样的错误:discord.ext.commands.errors.CommandNotFound:找不到命令“状态”
PD:我使用的是 Python 3.6
from discord.ext import commands
class MyBot(commands.Bot):
def __init__(self, command_prefix, self_bot):
commands.Bot.__init__(self, command_prefix=command_prefix, self_bot=self_bot)
self.message1 = "[INFO]: Bot now online"
self.message2 = "Bot still online {}"
async def on_ready(self):
print(self.message1)
@commands.command(name="status", pass_context=True)
async def status(self, ctx):
print(ctx)
await ctx.channel.send(self.message2 + ctx.author)
bot = MyBot(command_prefix="!", self_bot=False)
bot.run("token")
Run Code Online (Sandbox Code Playgroud) 我试图为我的机器人发出 ping 命令,这是我的代码
client.on('message', message => {
if (message.content === '+ping') {
message.channel.send(`Latency is ${m.createdTimestamp - message.createdTimestamp}ms. API Latency is ${Math.round(client.ws.ping)}ms`);
}
});
Run Code Online (Sandbox Code Playgroud)
但是我最终收到以下错误
C:\Users\ujjwa\Desktop\All Disc\Test all\index.js:236
message.channel.send(`Latency is ${m.createdTimestamp - message.createdTimestamp}ms. API Latency is ${Math.round(client.ws.ping)}ms`);
^
ReferenceError: m is not defined
at Client.<anonymous> (C:\Users\lol\Desktop\All Disc\Test all\index.js:236:42)
at Client.emit (events.js:327:22)
at MessageCreateAction.handle (C:\Users\lol\Desktop\All Disc\Test all\node_modules\discord.js\src\client\actions\MessageCreate.js:31:14)
at Object.module.exports [as MESSAGE_CREATE] (C:\Users\lol\Desktop\All Disc\Test all\node_modules\discord.js\src\client\websocket\handlers\MESSAGE_CREATE.js:4:32)
at WebSocketManager.handlePacket (C:\Users\lol\Desktop\All Disc\Test all\node_modules\discord.js\src\client\websocket\WebSocketManager.js:386:31)
at WebSocketShard.onPacket (C:\Users\lol\Desktop\All Disc\Test all\node_modules\discord.js\src\client\websocket\WebSocketShard.js:436:22)
at WebSocketShard.onMessage (C:\Users\lol\Desktop\All Disc\Test all\node_modules\discord.js\src\client\websocket\WebSocketShard.js:293:10)
at WebSocket.onMessage (C:\Users\lol\Desktop\All …Run Code Online (Sandbox Code Playgroud) 我最近一直在关注本教程以开始使用 Discord 的 API。不幸的是,当我得到关于打印公会中所有用户的部分时,我碰壁了。
当我尝试打印所有用户的姓名时,它只打印机器人的名称,不打印其他任何内容。作为参考,公会共有六个用户。该机器人具有管理员权限。
import os
import discord
TOKEN = os.environ.get('TOKEN')
client = discord.Client()
@client.event
async def on_ready():
for guild in client.guilds:
print(guild, [member.name for member in guild.members])
client.run(TOKEN)
Run Code Online (Sandbox Code Playgroud) discord ×10
discord.js ×4
javascript ×4
python ×4
discord.py ×3
node.js ×3
python-3.x ×2
bots ×1
css ×1
deprecated ×1
pycharm ×1
warnings ×1