异步功能不会执行其中的所有内容

时间:2019-10-16 08:02:08

标签: python python-3.x discord tweepy discord.py

因此,我正在使用python3.7和discord.py制作Discord机器人。 它的功能之一是可以使用tweepy库从discord发送推文,这是我的代码:

@bot.command(name='tw',help='tuitea')
@commands.has_role("chechu's")
async def tweet(ctx, *, args):
    tweepy.update_status(args)
    tweet = self.client.user_timeline(id = self.client_id, count = 1)[0]
    await ctx.send('tweet sent')

我的问题是,在发送了推文之后(这很正常),我想返回一条消息,其中包含指向刚刚发布的推文的链接。 如您在上面看到的,我尝试使用tweet = self.client.user_timeline(id = self.client_id, count = 1)[0]获得最后一条推特,但是执行甚至没有到达await ctx.send('tweet sent')

我试图创建另一个功能只是为了获取推文并返回一条消息,但是没有被调用,所以我不知道我在做什么错。

1 个答案:

答案 0 :(得分:0)

在我看来self.client_id可能设置不正确。

我试用了代码,当我用id=self.client_id(Wendy的twitter帐户ID)代替id='59553554'时,它运行良好:

  

tweet = client.user_timeline(id ='59553554',count = 1)[0]

我还尝试使用screen_name属性,该属性也返回了Wendy发送的最后一条推文:

  

tweet = client.user_timeline(screen_name ='@ Wendys',count = 1)[0]

为解决您的问题,我将检查以确保将self.client_id正确设置为该帐户使用的现有ID,或者只是插入您要发布的屏幕名称。

就返回指向该tweet的链接而言,您可以使用tweet的属性来构建tweet的URL:

  

等待ctx.channel.send(“ https://twitter.com/” + tweet.user.screen_name +“ / status /” + tweet.id_str)

这是完整的代码:

import discord
import tweepy
import os
from discord.ext import commands

prefix = "$"
bot = commands.Bot(command_prefix=prefix)

auth = tweepy.OAuthHandler(os.environ["TWITTER_API_KEY"], os.environ["TWITTER_API_SECRET"])
client = tweepy.API(auth)

@bot.command(pass_context=True)
async def tweet(ctx):
    tweet = client.user_timeline(id='59553554', count = 1)[0]
    await ctx.channel.send("https://twitter.com/" + tweet.user.screen_name + "/status/" + tweet.id_str)
    tweet = client.user_timeline(screen_name='@Wendys', count = 1)[0]
    await ctx.channel.send("https://twitter.com/" + tweet.user.screen_name + "/status/" + tweet.id_str)
bot.run(os.environ["DISCORD_TOKEN"])