在同一个应用程序中运行Flask和Discord bot

问题描述 投票:2回答:2

我正在用Python构建一个Discord bot,并希望从Twitch.tv的API接收HTTP请求(请参阅Webhooks GuideWebhooks Reference)(订阅类似的事件; X streamer已经上线)并基于HTTP的内容(POST或GET)从Twitch收到的请求,在Discord bot上做一些事情,例如:在文本频道上输出消息。

我正在使用discord.py Python Discord API / Library。

我调查过这个问题,发现Flask似乎是网络服务器收到这些请求的一个很好的极简主义选择。

我应该先说这是我对Python的新手,我之前从未使用过Flask。

现在。问题是我似乎无法找到一种在我的discord bot中运行Flask服务器的方法。

我已经尝试将这个简单的代码添加到我的discord.py脚本中:

from flask import Flask, request
app = Flask(__name__)
@app.route('/posts', methods=['POST'])
def result():
    print(request.form['sched'])
    # Send a message to a discord text channel etc...
    return 'Received !'

当我运行看起来像这样的discord.py脚本时:(删除了一些命令和功能以保持更短)

import discord
import asyncio

from flask import Flask, request
app = Flask(__name__)
@app.route('/posts', methods=['POST'])
def result():
    print(request.form['sched'])
    # Send a message to a discord text channel etc...
    return 'Received !'

client = discord.Client()

@client.event
async def on_ready():
    print('Logged in as')
    print(client.user.name)
    print(client.user.id)
    print('------')

@client.event
async def on_message(message):

    if message.author == client.user:
        return

    content = message.content
    fullUser = message.author.name+'#'+message.author.discriminator
    print(str(message.timestamp)+" #"+message.channel.name+" "+fullUser+": "+str(content.encode('ascii', 'ignore').decode('ascii')))
    if content.startswith('!'):

        content = content[1:]
        if content.startswith('test'):
            counter = 0
            tmp = await client.send_message(message.channel, 'Calculating messages...')
            async for log in client.logs_from(message.channel, limit=100):
                if log.author == message.author:
                    counter += 1

            await client.edit_message(tmp, 'You have {} messages.'.format(counter))

client.run('MyTokenHere')

看起来如果我将烧瓶指向discord.py(上面)并运行它,它将启动代码,转到“client.run('MyTokenHere')”部分进行不和谐,然后停止并运行不和谐机器人。直到我通过Ctrl + C退出机器人,实际的Flask服务器启动,但现在discord机器人断开连接,不再进行任何处理。

如果我在我的代码中的某处添加“app.run()”(在调用启动Discord bot部分的“client.run()”之前)以启动Flask服务器,同样的问题仍然存在;它只会运行烧瓶,卡住它直到我从Flask服务器中按Ctrl + C,然后它将继续启动Discord机器人。最终,我需要使用Discord API,我需要连接到Discord API网关和所有那些好的爵士乐实际上将消息发送到机器人的频道,所以我真的不知道该怎么做。

所以。我想我已尽力解释我最终要在这里尝试实现的目标,并希望有人可以帮助我找到一种方法来使用Flask工作,或者如果有更好更简单的方法,提供不同的解决方案。

python bots twitch discord.py
2个回答
1
投票

正如那位评论者告诉我的那样; threading似乎是要走的路。多谢你们!


0
投票

或者您可以使用终端多路复用器tmux独立运行它们!如果您在Linux平台上运行,tmux python3 flaskapp.py将运行烧瓶应用程序,而您可以独立运行discord bot。

© www.soinside.com 2019 - 2024. All rights reserved.