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
相关产品推荐
相关产品推荐

