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

Discord Bot导入自定义Python模块后无法登录,如何调用模块内函数

问题根源

你导入TwitterSentiments模块时Bot直接崩溃,核心原因是这个模块的Tweepy认证逻辑写在顶层全局作用域,导入时会直接执行,一旦密钥错误、网络无法访问Twitter API、Tweepy版本不兼容,导入阶段就会触发异常终止程序,根本不会执行后续的Bot启动逻辑。
同时你的Discord Bot代码中还存在异步方法调用错误,会导致功能触发时报错。


1. 修改TwitterSentiments.py,封装认证逻辑

把全局执行的认证逻辑移入函数内,只有调用查询功能时才执行认证,避免导入阶段就触发问题:

import tweepy
from textblob import TextBlob

# 密钥仅作为变量存储,不直接执行认证
consumer_key = 'SECRET'
consumer_secret = 'SECRET'
access_token = 'SECRET'
access_token_secret = 'SECRET'

# 封装认证逻辑,调用函数时才初始化接口
def get_twitter_api():
    auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
    auth.set_access_token(access_token, access_token_secret)
    return tweepy.API(auth, wait_on_rate_limit=True)

def find_tweets(ticker_symbol):
    api = get_twitter_api()
    # Tweepy v4+版本旧search方法已废弃,若报错可替换为search_recent_tweets
    public_tweets = api.search_tweets(ticker_symbol)
    sentiment_average_list = []
    for tweet in public_tweets:
        analysis = TextBlob(tweet.text)
        sentiment_average_list.append(analysis.sentiment.polarity)
    return sentiment_average_list

2. 修复Discord Bot代码的异步调用问题

client.wait_for是异步方法,必须加await关键字才能拿到实际的消息对象,同时要取.content属性获取用户输入的文本:

import discord
import os
from discord.ext import commands
# 可加异常捕获打印导入错误,方便定位
try:
    import TwitterSentiments as TS
except Exception as e:
    print(f"导入模块失败,错误信息:{e}")
    exit()

client = commands.Bot(command_prefix="$",help_command=None)

@client.event
async def on_ready():
    print("Bot is ready.")

@client.command(name="stock")
async def stock_sentiment(ctx):
    def check(msg):
        return msg.author == ctx.author and msg.channel == ctx.channel
    await ctx.send('Enter ticker symbol: ')
    # 加await获取消息对象,取content属性作为输入内容
    msg = await client.wait_for('message', check=check)
    ticker = msg.content.upper()
    await ctx.send(f"正在查询{ticker}的舆情数据,请稍候...")
    sentiment_list = TS.find_tweets(ticker)
    if sentiment_list:
        avg_sentiment = sum(sentiment_list)/len(sentiment_list)
        await ctx.send(f"{ticker}的平均舆情得分为:{avg_sentiment:.2f}(范围-1到1,越高越正面)")
    else:
        await ctx.send(f"没有找到关于{ticker}的相关推文")

if __name__ == '__main__':
    client.run("SECRET")

3. 其他兼容问题排查

  • 确认两个py文件存放在同一个目录下,确保导入路径正确
  • 执行pip install discord.py tweepy textblob安装所有依赖包
  • 确认你的Twitter API密钥有效,且当前网络可以正常访问Twitter接口,若使用代理可以在Tweepy初始化时添加代理参数

内容的提问来源于stack exchange,提问作者TheGodParticle

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 21:06:04