【发布时间】:2018-07-19 11:17:40
【问题描述】:
我正在用 Python 构建一个 Discord 机器人,并希望从 Twitch.tv 的 API 接收 HTTP 请求(请参阅 Webhooks Guide 和 Webhooks Reference)(订阅事件,例如;X 流媒体已上线)并基于从 Twitch 收到的 HTTP(POST 或 GET)请求的内容,在 Discord bot 上执行某些操作,例如:在文本通道上输出消息。
我正在使用discord.py Python Discord API/库。
我调查了此事,发现Flask 似乎是网络服务器接收这些请求的一个很好的极简选择。
我应该先说我对 Python 很陌生,而且我以前从未使用过 Flask。
现在。问题是我似乎无法找到在我的不和谐机器人中运行 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')
似乎如果我将flask指向discord.py(上面)并运行它,它将启动代码,进入“client.run('MyTokenHere')”部分以获取不和谐,然后停在并运行不和谐机器人。直到我通过 Ctrl+C 退出机器人,实际的 Flask 服务器才启动,但现在不和谐机器人已断开连接,不再进行任何处理。
如果我要在代码中的某处添加“app.run()”(在调用启动 Discord 机器人部分的“client.run()”之前)以启动 Flask 服务器,同样的问题仍然存在;它只会运行烧瓶,一直卡在上面,直到我 Ctrl+C 退出 Flask 服务器,然后它将继续启动 Discord 机器人。 最终,我需要使用 Discord API,并且我需要连接到 Discord API 网关和所有优秀的爵士乐才能将消息实际发送到带有机器人的频道,所以我真的不知道在这里做什么。
所以。我想我已经尽力解释我最终想要在这里实现的目标,希望有人可以帮助我找到一种方法来使用 Flask 进行这项工作,或者如果有更好更简单的方法,提供不同的解决方案.
【问题讨论】:
-
你可能不得不在不同的线程中运行它们。
-
您需要为您的 discord 机器人创建一个子线程。尝试使用
threading模块。
标签: python bots twitch discord.py