Discord - 仅从 python 应用程序向不和谐频道发送消息(一种方式通信)

joh*_*ohn 6 python bots python-asyncio discord discord.py

我正在设计一个应用程序,当我的 python 代码发生某些事情时(例如我的网站上的新用户注册),我可以向我的不和谐频道发送通知。这将是一种单向通信,因为只有 python 应用程序会向不和谐通道发送消息。

这是我尝试过的。

import os
import discord
import asyncio


TOKEN = ""
GUILD = ""

def sendMessage(message):
    client = discord.Client()

    @client.event
    async def on_ready():


        channel = client.get_channel(706554288985473048)
        await channel.send(message)
        print("done")

        return ""


    client.run(TOKEN)
    print("can you see me?")


if __name__ == '__main__':

    sendMessage("abc")
    sendMessage("def")
Run Code Online (Sandbox Code Playgroud)

问题是仅发送第一条消息(即 abc),然后 aysn 函数阻止第二个调用(def)。

我不需要监听不和谐事件,也不需要保持网络通信畅通。有什么方法可以让我在不收听事件的情况下将文本(就像我们通常使用的 api 发布方法一样)发布到不和谐服务器?

谢谢。

Ben*_*yka 14

您可以使用 Discord 网络钩子。

首先,在您要向其发送消息的 Discord 频道中创建一个 webhook。这是 Discord 的帮助页面。

然后,使用该discord.Webhook.from_url方法Webhook从 Discord 给您的 URL 中获取一个对象。

最后,使用该discord.Webhook.send方法使用 webhook 发送消息。

这是使用requests模块的示例:

import requests
from discord import Webhook, RequestsWebhookAdapter

webhook = Webhook.from_url("url-here", adapter=RequestsWebhookAdapter())
webhook.send("Hello World")
Run Code Online (Sandbox Code Playgroud)


joh*_*ohn 6

我已经找到了。“网络钩子”就是答案。无需使用 discord.py,只需为您的频道创建一个 webhook,然后将数据发布到该端点即可。

import requests

#Webhook of my channel. Click on edit channel --> Webhooks --> Creates webhook
mUrl = "https://discord.com/api/webhooks/729017161942******/-CC0BNUXXyrSLF1UxjHMwuHA141wG-FjyOSDq2Lgt*******************"

data = {"content": 'abc'}
response = requests.post(mUrl, json=data)

print(response.status_code)

print(response.content)
Run Code Online (Sandbox Code Playgroud)