首页 > 解决方案 > 如何从 Flask Python 应用程序向 Discord 机器人发出带有 JSON 的 POST 请求

问题描述

我有一个小的不和谐机器人和一个小的烧瓶项目(bot.py 和 app.py)。

在我的烧瓶项目中,我有一个可以接收 JSON POST 请求的端点(我可以看到 JSON 很好)。现在的问题是我如何从 Flask 向我的 Bot.py 发送这个 JSON 有效负载,以便我的 bot.py 将它发布到我的 Discord 频道上。

我的代码:

from flask import Flask, json, request,
app = Flask(__name__)


@app.route('/', methods=['GET'])
def index():
    return 'working ...'

@app.route('/webhook', methods=['POST'])
def jiraJSON():
    if request.is_json:
        data = request.get_json()
        print(data)
        return 'json received', 200
    else:
        return 'Failed - Not a JSON', 400

if __name__ == '__main__':
    app.run()
# bot.py
import os

import discord
from dotenv import load_dotenv

load_dotenv()
TOKEN = os.getenv('DISCORD_TOKEN')

client = discord.Client()

@client.event
async def on_ready():
    print(f'{client.user} has connected to Discord!')

client.run(TOKEN)

标签: pythonflaskdiscorddiscord.py

解决方案


所以我设法使用 Quart 和一个带有 Discord.py 的机器人让它工作。

这将在 webhook 上获取 JSON,并将该 JSON 发送到 Discord 机器人以发布在 Chanel ID 上。

import discord
import asyncio

from quart import Quart, request

app = Quart(__name__)
client = discord.Client()

# Setup for Discord bot
@app.before_serving
async def before_serving():
    loop = asyncio.get_event_loop()
    await client.login('<<<your_discord_bot_token_id>>>')
    loop.create_task(client.connect())

#Setup for webhook to receive POST and send it to Discord bot
@app.route('/webhook', methods=['POST'])
async def myJSON():
    channel = client.get_channel(<<<your_discord_chanel_ID>>>)
    if request.is_json:
        data = await request.get_json()
        print(data)
        await channel.send(data)
        return 'json received', 200
    else:
        return 'Failed - Not a JSON', 400


if __name__ == '__main__':
    app.run()

推荐阅读