标签: discord

Python asyncio - 使用Task的循环退出已被销毁,但它正在等待处理

这是我的python程序的相关代码:

import discord
import asyncio

class Bot(discord.Client):
    def __init__(self):
        super().__init__()

    @asyncio.coroutine
    def my_background_task(self):
        yield from self.wait_until_ready()
        while not self.is_closed:
            yield from asyncio.sleep(3600*24) # <- This is line 76 where it fails
            doSomething()

bot = Bot()
loop = asyncio.get_event_loop()
try:
    loop.create_task(bot.my_background_task())
    loop.run_until_complete(bot.login('username', 'password'))
    loop.run_until_complete(bot.connect())
except Exception:
    loop.run_until_complete(bot.close())
finally:
    loop.close()
Run Code Online (Sandbox Code Playgroud)

该程序偶尔退出(自己,但不应该),除了以外没有其他错误或警告

Task was destroyed but it is pending!
task: <Task pending coro=<my_background_task() running at bin/discordBot.py:76> wait_for=<Future pending cb=[Task._wakeup()]>>
Run Code Online (Sandbox Code Playgroud)

如何确保程序不会随机退出?我在Xubuntu 15.10上有Python 3.4.3+.

python-3.x python-asyncio discord discord.py

12
推荐指数
1
解决办法
4789
查看次数

discord.js MessageEmbed fields.flat 不是函数

我正在使用 JavaScript 和 discord.js 制作一个 Discord 机器人。在那里,我想向频道发送 RichEmbed/MessageEmbed(我不知道它是如何调用的)。但是它没有发送 Embed,而是在 discord.js 中抛出了一个错误。

TypeError: fields.flat is not a function
    at Function.normalizeFields (D:\discord-bot\node_modules\discord.js\src\structures\MessageEmbed.js:436:8)
    at MessageEmbed.addFields (D:\discord-bot\node_modules\discord.js\src\structures\MessageEmbed.js:252:42)
    at commands.forEach.command (D:\discord-bot\src\js\core\commands\commandManager.js:55:19)
    at Array.forEach (<anonymous>)
    at helloWorldEmbed (D:\discord-bot\src\js\core\commands\commandManager.js:54:18)
    at Object.call (D:\discord-bot\src\js\core\commands\commandManager.js:29:13)
    at Client.client.on (D:\discord-bot\src\js\core\bot.js:16:49)
    at Client.emit (events.js:182:13)
    at MessageCreateAction.handle (D:\discord-bot\node_modules\discord.js\src\client\actions\MessageCreate.js:31:14)
    at Object.module.exports [as MESSAGE_CREATE] (D:\discord-bot\node_modules\discord.js\src\client\websocket\handlers\MESSAGE_CREATE.js:4:32)
Run Code Online (Sandbox Code Playgroud)

我已经搜索了答案,但似乎我是唯一遇到问题的人。

这是我使用的代码:

const embed = new MessageEmbed()
    .setTitle('Hello World')
    .setDescription('This is a test.')
    .setColor('#3498db')
quotes.forEach(quote => {
    embed.addField(quote.name, quote.description, true)
})
message.channel.send('Hello world.', embed)
Run Code Online (Sandbox Code Playgroud)

javascript discord discord.js

11
推荐指数
1
解决办法
1万
查看次数

Selfbot 的 Discord API“软禁令”?它只能读取自己的消息

所以今天,突然间,我的 Discord Selfbot 停止了工作。它已经运行了数周没有任何问题。它所做的只是监视来自其他渠道的机器人警报,并在满足某些条件时通知我。

基本上问题是当我print(message.content)得到空字符串时,当print(message.embeds)我得到一个空列表时。对于不是我自己发送的任何消息,都会发生这种情况。基本上我可以从任何频道拉取任何消息,但如果它不是我发送的,我会看到它是空的。我仍然可以print(message)看到它的 ID、作者等,但无法检索内容/嵌入。

我认为这是 Discord API 的某种软禁令(帐户没有收到任何警告并且正常工作),但后来尝试创建一个新帐户并遇到了同样的问题。我很困惑,无法找出问题的原因……除非他们为每个人更改了 API。

discord discord.py

11
推荐指数
3
解决办法
5060
查看次数

discord.js bot回复自己

我目前正在编写我的第一个discord bot,它已经可以播放YouTube音乐了.

if (message.content.includes("Good Job") || 
    message.content.includes("good job")) {
    message.channel.sendMessage("Good Job everyone :smirk:");
}
Run Code Online (Sandbox Code Playgroud)

如你所见,如果有人输入"好工作"(这只是一个例子),那么机器人将回复"每个人都很好:smirk :),但随后垃圾邮件将开始:机器人读取他自己的消息并回复它.

如何防止机器人自行回答?

javascript bots node.js discord discord.js

10
推荐指数
3
解决办法
5705
查看次数

ModuleNotFoundError:没有名为“discord”的模块

尝试从 CMD 运行我的 .py 文件,但找不到不和谐模块

>>File 'C:\Users\\****\Desktop\Discord_Bot\main.py', line 1, in module

>>import discord 

>>ModuleNotFoundError: No module named 'discord'
Run Code Online (Sandbox Code Playgroud)

虽然,当我跑步时:

>>python 

>>import discord
Run Code Online (Sandbox Code Playgroud)

它按预期工作,有什么建议吗?

python discord discord.py

10
推荐指数
2
解决办法
8万
查看次数

证书验证失败:证书已过期 (_ssl.c:1108)

尝试运行我的 Discord 机器人时,出现此错误:

raise ClientConnectorCertificateError(
    aiohttp.client_exceptions.ClientConnectorCertificateError: Cannot connect to
    host discordapp.com:443 ssl:True [SSLCertVerificationError: 
   (1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: 
   certificate has expired (_ssl.c:1108)')]
Run Code Online (Sandbox Code Playgroud)

它刚刚开始突然发生,并且每次都发生。

我在 Windows 10 上使用 Python 3.8。

这是什么意思,我该如何解决?

python certificate discord

10
推荐指数
1
解决办法
1万
查看次数

我的 on_member_join 事件不起作用。我尝试了意图,但它给出了这个错误

考虑:

st 最近的调用最后):
文件“randomgg.py”,第 1271 行,在 \u003cmodule\u003e
client.run(token)
文件“/usr/local/lib/python3.8/site-packages/discord/client.py” ,第 708 行,运行中
return future.result()
文件“/usr/local/lib/python3.8/site-packages/discord/client.py”,第 687 行,在运行程序中
等待 self.start(*args, * *kwargs)
文件“/usr/local/lib/python3.8/site-packages/discord/client.py”,第651行,在开始
等待self.connect(reconnect=reconnect)
文件“/usr/local/lib/ python3.8/site-packages/discord/client.py”,第 586 行,在 connect
raise PrivilegedIntentsRequired(exc.shard_id) from None
Discord.errors.PrivilegedIntentsRequired: Shard ID None 正在请求尚未在开发者门户。建议访问https://discord.com/developers/applications/并在应用程序页面中显式启用特权意图。如果这是不可能的,那么请考虑禁用特权意图。\

我的代码是

import aiohttp
import discord
import asyncio
from collections import Counter
import typing
from discord.ext import commands
import os
from discord.ext.commands import has_permissions
import random
import json
from discord import Status
from asyncio import gather
from discord.utils import get
import datetime …
Run Code Online (Sandbox Code Playgroud)

python pycharm discord discord.py

10
推荐指数
1
解决办法
3万
查看次数

如何检查机器人是否可以私信用户

如果用户关闭了隐私设置“允许来自服务器成员的直接消息”并且不和谐机器人调用

await user.dm_channel.send("Hello there")
Run Code Online (Sandbox Code Playgroud)

你会得到这个错误:

discord.errors.Forbidden: 403 Forbidden (error code: 50007): Cannot send messages to this user
Run Code Online (Sandbox Code Playgroud)

我想检查是否可以在不发送消息的情况下向用户发送消息。尝试发送消息并捕获此错误对我来说不起作用,因为我不希望在允许机器人发送消息的情况下发送消息

我已经尝试过这个:

print(user.dm_channel.permissions_for(bot).send_messages)
Run Code Online (Sandbox Code Playgroud)

但它总是返回 True,即使该消息是不允许的。

我也尝试过这个:

channel = await user.create_dm()
if channel is None:
    ...
Run Code Online (Sandbox Code Playgroud)

但不幸的是,似乎“有权向用户发送消息”和“有权创建DM频道”被认为是不同的。

编辑

由于似乎有点混乱,为了澄清确切的用法,请看这个例子。有一台服务器和 3 个有问题的用户:我、我的机器人和史蒂夫。Steve 已勾选“允许来自服务器成员的直接消息”。

该机器人有一个名为 的命令!newgame,它接受用户列表并在他们之间启动游戏,其中涉及对游戏中的一些成员进行私聊。由于史蒂夫的隐私设置,他无法玩游戏(因为机器人需要向他发送消息)。如果我做

!newgame @DJMcMayhem @Steve
Run Code Online (Sandbox Code Playgroud)

我想提供这样的回应:

await user.dm_channel.send("Hello there")
Run Code Online (Sandbox Code Playgroud)

但据我目前所知,确定史蒂夫是否可以玩游戏的唯一方法是首先尝试向每个用户发送消息,我想避免这种情况。

python discord discord.py

10
推荐指数
1
解决办法
1935
查看次数

如何通过直接修改IDENTIFY数据包来获取discord bot的移动状态?

显然,discord 机器人可以具有移动状态,而不是默认获得的桌面(在线)状态。

具有移动状态的机器人

经过一番挖掘后,我发现这种状态是通过修改 的值来实现的,IDENTIFY packet或者discord.gateway.DiscordWebSocket.identify理论上应该$browser让我们获得移动状态。Discord AndroidDiscord iOS

修改我在网上找到的执行此操作的代码片段后,我最终得到以下结果:

def get_mobile():
    """
    The Gateway's IDENTIFY packet contains a properties field, containing $os, $browser and $device fields.
    Discord uses that information to know when your phone client and only your phone client has connected to Discord,
    from there they send the extended presence object.
    The exact field that is checked is the $browser field. If it's set to Discord Android on desktop,
    the mobile …
Run Code Online (Sandbox Code Playgroud)

python python-3.x discord discord.py pycord

10
推荐指数
2
解决办法
4771
查看次数

Discord.js - 如何向我的机器人添加“尝试我的命令”功能?

我查看了一些机器人的个人资料,显然,Discord 为机器人添加了“尝试我的命令”功能。我试着到处寻找,但什么也没找到。如何将此功能添加到我的机器人中?

(我使用的是discord.js v14)

试用我的命令功能的图片。

1

javascript node.js discord discord.js

10
推荐指数
2
解决办法
1万
查看次数