因此,我正在制作一个Discord Bot,该Bot在某人通过Twitch.tv上线时发布。目前,我有一个运行bot的Python程序和一个运行小型服务器以从Twitch服务器(webhook)接收数据的程序。我不确定如何将从服务器接收的数据传递给Discord机器人。这两个程序必须同时运行。
DiscordBot
import discord
client = discord.Client()
async def goes_live(data):
print(data)
print('Going Live')
msg = '--- has gone live'
await client.send_message(discord.Object(id='---'), msg)
@client.event
async def on_message(message):
if message.author == client.user:
return
message.content = message.content.casefold()
@client.event
async def on_ready():
print('Logged in as')
print(client.user.name)
print(client.user.id)
print('------')
client.run('---')
Web服务器
import web
urls = ('/.*', 'hooks')
app = web.application(urls, globals())
class hooks:
def POST(self):
data = web.data()
print("")
print('DATA RECEIVED:')
print(data)
print("")
return 'OK'
def GET(self):
try:
data = web.input()
data = data['hub.challenge']
print("Hub challenge: ", data)
return data
except KeyError:
return web.BadRequest
if __name__ == '__main__':
app.run()
答案 0 :(得分:1)
由于两个程序都在python中,并且它们之间的相互关系足以始终运行,因此您可以简单地使用multiprocessing
模块:让每个程序都以{{1}的身份运行}实例,并给每个实例一个multiprocessing.Process
的一端,这样您就可以在进程之间交换信息。
架构看起来像main.py看起来像这样
multiprocessing.Pipe
# main.py
from multiprocessing Process, Pipe
import program_1
import program_2
program_1_pipe_end, program_2_pipe_end = Pipe()
process_1 = Process(
target = program_1.main,
args = (program_1_pipe_end,)
)
process_2 = Process(
target = program_2.main,
args = (program_2_pipe_end,)
)
process_1.start()
process_2.start()
#Now they are running
process_1.join()
process_2.join()
您可以找到Pipe documentation here(在多处理文档中)。
答案 1 :(得分:0)
机器人和小型服务器是否在同一台机器上运行?在这种情况下,您只需让服务器将文件写入到机器人可以访问并定期检查的位置即可。
答案 2 :(得分:0)
如何使用处理这两个程序之间通信的Flask服务器。您可以定义自定义端点,这些端点可以获取数据并将其发送到不和谐脚本。
@app.route('/ep1', methods = ['GET','POST'])
def ep1():
if request.method == 'POST':
#do something for a POST request.
else:
#do something for a GET request.
您可以使用此结构构造一些内容,以监听更改,然后将其发布到不和谐的bot。 您还可能要考虑在heroku上托管此服务器