Обновление GUI с событиями ботов Discord - PullRequest
0 голосов
/ 28 мая 2020

Моя цель - создать бота Discord, который при использовании команды берет все, что вы сказали, и отображает это на маленьком Tkinter GUI. Мне удалось заставить его работать с двумя скриптами по отдельности, ботом Discord и скриптом tkinter, который будет проверять текстовый файл (где находится текст из Discord) каждый раз и обновлять метку tkinter. Конечно, это не очень эффективно, поэтому я хочу, чтобы он обновлял gui только тогда, когда команда используется в Discord. Я читал о многопоточности и многопроцессорности, но оба дают мне такие ошибки, как «потоки / процессы могут быть запущены только один раз» или просто не работают так, как мне нужно. программирование, но работа с потоками и процессами. Это правильный способ достичь того, о чем я упоминал ранее? Это код для бота Discord:

client = commands.Bot(command_prefix='*')
gui_main = threading.Thread(target=gui.main)


gui_main.start()

@client.event
async def on_ready():
    print('**Listo gfe')




@client.command()
async def showchechu(ctx,*,text):

    print(text)

    f = open("input.txt", "w")
    f.write(text)
    f.close()


    gui_main.start()


    embed = discord.Embed(
        title = str(ctx.message.author.name),
        description = text,
        colour = discord.Colour.blue()
    )

    embed.set_footer(text='Dale unos segundos y le saldrá tu mensaje al chechu')


    await ctx.send(embed=embed)




@client.command()
async def ole(ctx):
    channel = ctx.message.author.channel
    print(channel)
    await channel.connect()



client.run(TOKEN)

А это код для GUI:

import tkinter as tk

def main():
    root=tk.Tk()
    root.attributes('-fullscreen', True)
    root.wm_attributes("-topmost", 1)

    pad=3
    root.geometry("{0}x{1}+0+0".format(
            root.winfo_screenwidth()-pad, root.winfo_screenheight()-pad))

    def exit(event):
        root.destroy()

    root.bind('<Escape>',exit)

    #root.after(5000, root.destroy)

    set_label(root)

    root.mainloop()

def update_input():
    input_text = ''
    f = open("input.txt", "r")
    input_text = f.read()
    f.close()
    return input_text

def set_label(root):
    svar = tk.StringVar()
    input_text = update_input()

    svar.set(input_text)

    labl = tk.Label(root, bd=8, wraplength=350, textvariable=svar, heigh=5, font=('Helvetica 25 bold'))

    labl.pack()

    print('msg: '+str(input_text))

Я использую python 3.8

...