Discord克隆器对接customtkinter时有效token提示无效错误求助
问题:Discord Bot与CustomTkinter结合时出现LoginFailure错误
问题描述
开发Discord克隆器时,结合CustomTkinter框架后,即使使用有效Bot Token,仍触发discord.errors.LoginFailure错误,提示"Improper token has been passed."。
问题原因
代码中TOKEN = (str(token.get()))在window.mainloop()之前执行,此时用户还未在输入框中输入Token,token.get()返回空字符串,导致传入无效Token触发登录失败。此外,client.run()会阻塞主线程,直接调用会导致GUI无响应。
解决方案
- 将获取Token和启动Bot的逻辑移到按钮的回调函数中,确保用户输入后再执行
- 使用线程单独运行Bot,避免阻塞GUI主线程
- 修复重复赋值的
client = client = ...写法
修复后的完整代码:
import discord from discord.ext import commands import customtkinter import threading # 初始化Bot,修复重复赋值问题 client = commands.Bot(command_prefix="!", intents=discord.Intents.all()) customtkinter.set_appearance_mode('dark') customtkinter.set_default_color_theme('dark-blue') window = customtkinter.CTk() window.geometry('400x250') window.title('discord server cloner -- unknown') window.resizable(False, False) frame = customtkinter.CTkFrame( master=window, width=400, height=250, corner_radius=10, fg_color='transparent' ) frame.pack(fill='both', expand=True) font = ("Comic Sans MS", 20, "bold") unknown = customtkinter.CTkLabel(master=frame, text="UNKNOWN's cloner", font=font) sep = customtkinter.CTkLabel(master=frame, text="") sep1 = customtkinter.CTkLabel(master=frame, text="") token = customtkinter.CTkEntry(master=frame, show='*', placeholder_text="bot token") def start_bot(): # 获取用户输入的Token TOKEN = token.get().strip() if not TOKEN: print("请输入有效的Bot Token") return try: client.run(TOKEN) except discord.errors.LoginFailure: print("无效的Token,请检查后重试") butt = customtkinter.CTkButton(master=frame, text='next', command=lambda: [frame.destroy(), threading.Thread(target=start_bot).start()]) unknown.pack() sep.pack() token.pack() sep1.pack() butt.pack() window.mainloop()
关键修改说明
- 新增
start_bot函数,负责获取输入的Token并启动Bot,同时添加空值检查和错误捕获 - 按钮回调中使用
threading.Thread启动Bot,避免GUI阻塞 - 修复了
client重复赋值的问题 - 对获取的Token做了
strip()处理,避免意外的空格导致无效
内容的提问来源于stack exchange,提问作者unknown bxby
相关产品推荐
相关产品推荐

