Как мне go запустить бота discord.py в той же программе, что и HTTP-сервер? - PullRequest
0 голосов
/ 17 июня 2020

Цель: я пытаюсь обрабатывать запросы POST от веб-перехватчиков Trello, а затем отправлять встраивание с соответствующими данными в гильдию разногласий.

Текущий прогресс: я получил обработку запросов POST, и я знаю, как отправить вставку и тому подобное. Однако когда дошло до того, что мне нужно реализовать два вместе , я понял, что просто py trelloHandler.py невозможно, и они оба начнут работать. Я провел небольшое исследование и нашел человека, задающего аналогичный вопрос . Для большинства людей это было бы полезно, хотя я довольно новичок в python (мне нравится работать над проектами, чтобы учиться) и не знаю, как бы реализовать потоки. Мне удалось найти руководство на реальном python .com , но я не понимаю его.

Мой вопрос (TL; DR): Как я могу запустить HTTP-сервер, который будет прослушивать почтовые запросы в той же программе, что и бот discord.py (точнее, с использованием потоковой передачи)?

Мой код («bot_token_here» заменяется моим токеном Discord):

import discord
import json
from http.server import HTTPServer, BaseHTTPRequestHandler
from discord.ext import commands

client = commands.Bot(command_prefix = "~")

class requestHandler(BaseHTTPRequestHandler):
    def do_POST(self):
        # Interpret and process the data
        content_len = int(self.headers.get('content-length', 0))
        post_body = self.rfile.read(content_len)
        data = json.loads(post_body)

        # Action and Models data
        action = data['action']
        actionData = action['data']
        model = data['model']

        # Board and card data
        board = action['data']['board']
        card = action['data']['card']

        # Member data
        member = action['memberCreator']
        username = member['username']

        # Keep at end of do_POST
        self.send_response(204)
        self.send_header('content-type', 'text/html')
        self.end_headers()

    def do_HEAD(self):
        self.send_response(200)
        self.end_headers()

@client.event
async def on_ready():
    print("Bot is online, and ready to go! (Listening to {} servers!)".format(len(list(client.guilds))))

def main():
    PORT = 9090
    server_address = ('localhost', PORT)
    server = HTTPServer(server_address, requestHandler)
    server.serve_forever()
    client.run("bot_token_here")

if __name__ == '__main__':
    main()
...