标签: discord

如何让 Discord 机器人显示“机器人正在输入...”状态?

所以如果我有一个像这样的长命令:

@bot.command(pass_context=True)
async def longCommand(ctx):
   #typing status
   sleep(10)
   bot.say("Done!")
Run Code Online (Sandbox Code Playgroud)

不幸的是,在文档或此处没有找到任何内容。

python python-3.x discord discord.py

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

从 Python Discord 机器人中的同步线程发送消息

我正在使用 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 创建一个事件循环,然后调用该函数,但最终还是出现了错误。

有任何想法吗?

python multithreading python-asyncio discord discord.py

8
推荐指数
1
解决办法
1624
查看次数

如何在 Python 3 中计算时间?

我想要一个代码来显示某人在语音通道中的完整时间,但我不知道如何启动和停止计数器。

    @bot.event
    async def on_voice_state_update(before, after):

        if after.voice.voice_channel:
            timestrr = time.strftime("%d.%m.%Y-%H:%M:%S")
            voicezeit(after.id, timestrr)
    #here should a timer start
        else:
             #and here should the timer stop
Run Code Online (Sandbox Code Playgroud)

我真的不知道该怎么做,所以我真的很感激每一个帮助。

python python-3.x discord discord.py

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

如何在不保存图像的情况下将 PIL Image 对象上传到 Discord 聊天?

我正在尝试将 PIL Image 对象发送到不和谐聊天(尽管我不想保存文件)我有一个函数可以从互联网上收集图像,将它们垂直连接在一起,然后返回一个 PIL Image 对象。

下面的代码从我本地机器上的 PIL Image 对象创建一个文件图像,然后将其发送到 Discord 聊天。我不想经常在我的机器上重新创建和保存文件图像。如何只发送 PIL Image 对象,而不必每次发送请求时都保存图像?

from PIL import Image
from io import BytesIO
import requests
import discord

# Initializes Discord Client
client = discord.Client()

# List of market indexes
indexes = [ 
    'https://finviz.com/image.ashx?dow',
    'https://finviz.com/image.ashx?nasdaq',
    'https://finviz.com/image.ashx?sp500'
]


# Returns a vertical image of market indexes
def create_image():
    im = []
    for index in indexes:
        response = requests.get(index)
        im.append(Image.open(BytesIO(response.content)))

    dst = Image.new('RGB', (im[0].width, im[0].height + im[1].height + im[2].height))
    dst.paste(im[0], (0, 0)) …
Run Code Online (Sandbox Code Playgroud)

python python-imaging-library discord

8
推荐指数
1
解决办法
1687
查看次数

Discord.py on_member_join 和 on_member_leave 不起作用

我开始使用discord.py(不是discord.ext命令,只有import discord)。最近做了一个频道,频道名称显示公会成员人数,每次有人加入或离开都会更新。这是我的代码:

import discord

client = discord.Client()

@client.event
async def on_ready():
    print("Bot is ready")

@client.event
async def on_member_join(member):
    channel = client.get_channel('channel id here')
    await channel.edit(name = 'Member count: {}'.format(channel.guild.member_count()))
    
@client.event
async def on_member_leave(member):
    channel = client.get_channel('channel id here')
    await channel.edit(name = 'Member count: {}'.format(channel.guild.member_count()))

client.run('my token here')
Run Code Online (Sandbox Code Playgroud)

我还添加了client.on_message命令,以便机器人可以将该名称编辑为我输入的任何内容。

@client.event
async def on_message(message)
     if message.content == 'rename channel':
            channel = client.get_channel('channel id here')
            await channel.edit(name = 'TEST')
Run Code Online (Sandbox Code Playgroud)

现在,在添加了一些用于调试的打印后,我发现了这一点on_member_join()并且on_member_leave()从未被调用,但是当我键入命令时,机器人会编辑通道的名称。那是一个语音频道,显示成员数量。没有任何错误。我读错了 API …

discord discord.py

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

Discord.py:如何修复“事件循环已关闭”

我是编程新手。我试图让我的不和谐机器人打开命令提示符以确认它可以运行,但我收到此错误:

  File "C:\Users\---\AppData\Local\Programs\Python\Python38-32\lib\asyncio\proactor_events.py", line 116, in __del__
    self.close()
  File "C:\Users\---\AppData\Local\Programs\Python\Python38-32\lib\asyncio\proactor_events.py", line 108, in close
    self._loop.call_soon(self._call_connection_lost, None)
  File "C:\Users\---\AppData\Local\Programs\Python\Python38-32\lib\asyncio\base_events.py", line 719, in call_soon
    self._check_closed()
  File "C:\Users\---\AppData\Local\Programs\Python\Python38-32\lib\asyncio\base_events.py", line 508, in _check_closed
    raise RuntimeError('Event loop is closed')
RuntimeError: Event loop is closed
[Finished in 0.871s]
Run Code Online (Sandbox Code Playgroud)

代码:

import discord
from discord.ext import commands

client=commands.Bot(command_prefix = '.')

@client.event
async def on_ready():
    print('ok')

client.run(token)
Run Code Online (Sandbox Code Playgroud)

导致此错误的原因是什么,我该如何解决?

编辑:经过一些测试,我相信“client.run(token)”是导致“事件循环关闭”的原因,不知道为什么。

python python-3.x discord discord.py

8
推荐指数
1
解决办法
7271
查看次数

Discord.js 获取通道中所有消息的数组

我正在编写一个 Discord 机器人,我想在其中执行命令!quote,它将从具有 id 的特定频道quotesID(可能是也可能不是!quote已发送的不同频道)中拉出一条随机消息。我一直在查看Discord.js的文档,但我找不到通过其 ID获取TextChannel然后使用 TextChannels.messages函数从而获取MessageManager和消息集合的方法。

我知道我可以使用公会msg.guildmsg触发器在哪里!quote)或获得 tex

我是 JavaScript 和 Discord.js 的新手,所以任何信息都有帮助。(我使用的是 Discord.js 版本 12.2.0)

javascript node.js discord discord.js

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

Discord py OSError: [WinError 121] 信号量超时期限已过期

所以最近我收到了标题中的错误。我不确定是什么导致了这个问题,大约一周前它随机停止了机器人的工作。我已经完成了谷歌搜索,但仍然没有找到解决这个问题的正确方法。我已在完整错误的粘贴箱下方链接以及我当前使用的不和谐机器人的链接。我已经与该机器人的开发人员交谈过,目前正在使用它的人没有任何问题。这似乎是我这边的问题。如果有人可以帮助我解决这个问题,我将不胜感激。

https://github.com/yannickgloster/discord-10man

OSError: [WinError 121] The semaphore timeout period has expired
Run Code Online (Sandbox Code Playgroud)

https://pastebin.com/2Hsg03if

discord discord.py

8
推荐指数
1
解决办法
4613
查看次数

图表看起来只有灰色,不显示颜色 - Chartjs,discordjs

我正在设计一个 discord.js 代码,它将显示成员的消息和语音统计信息,根据它的排行榜可能会导致奖品。

通常,我的图表以某种方式应该看起来像这些图表:

(上图分别是discord服务器的语音和消息统计)

但是当我输入命令时,它会显示这些无色图形:(不是关于它的设计,而是关于它的颜色)

在这两个图之间,没有代码差异,没有 node.js 版本更改,没有平台更改等。

我已经在这个项目上工作了很长时间,但一个月左右后,我仍然找不到我的代码有任何错误。也许我错过了什么。有人可以帮我吗?谢谢。

一般统计命令:

const { Client, Message, MessageEmbed, MessageAttachment } = require("discord.js");
const Stat = require("../../Models/Database/Stat");
const tm = require("../../Managers/TimeManager");

const moment = require("moment");
require("moment-duration-format");

const cm = require("../../Managers/ChartManager");

/**
 * @param {Client} client 
 * @param {Message} message 
 * @param {Array<String>} args 
 */
module.exports.execute = async(client, message, args) => {
    let victim = message.mentions.users.first() || client.users.cache.get(args[0]) || message.author;

    let embed = new MessageEmbed()
        .setAuthor(victim.username, victim.avatarURL({ dynamic: true }))
        .setFooter("?statistik bilgileri");

    let data …
Run Code Online (Sandbox Code Playgroud)

javascript node.js chart.js discord discord.js

8
推荐指数
1
解决办法
168
查看次数

如何在 Discord.js 中检查消息是否为私信?

目前我使用的是最新版本的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)

javascript discord discord.js

8
推荐指数
1
解决办法
7400
查看次数