Асинхронная функция не выполняет в ней все - PullRequest
0 голосов
/ 16 октября 2019

Итак, я делаю бот Discord, используя python3.7 и discord.py. Одна из его функциональных возможностей заключается в том, что вы можете отправлять твиты с разногласий с помощью библиотеки tweepy, вот код, который у меня есть для этого:

@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 голосов
/ 27 октября 2019

Мне кажется, что self.client_id может быть установлен неправильно.

Я поиграл с кодом, и когда я заменил id=self.client_id на id='59553554' (идентификатор учетной записи твиттера Венди), он работал нормально:

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

Я также попытался использовать атрибут screen_name, и он тоже вернул последний твит, отправленный Венди:

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

Чтобы решить вашу проблему, я хотел бы убедиться, что self.client_id правильно установлен на существующий идентификатор, чтоучетная запись использует или просто добавляет отображаемое имя, с которым вы публикуете сообщение.

Что касается возврата ссылки на твит, вы можете создать URL твита, используя атрибуты твита:

await 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"])
...