You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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无响应。

解决方案

  1. 将获取Token和启动Bot的逻辑移到按钮的回调函数中,确保用户输入后再执行
  2. 使用线程单独运行Bot,避免阻塞GUI主线程
  3. 修复重复赋值的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 01:20:42