質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Discord

Discordは、ゲーマー向けのボイスチャットアプリです。チャット・通話がブラウザ上で利用可能で、個人専用サーバーも開設できます。通話中でも音楽を流したり、PC画面を共有できるなど多機能な点が特徴です。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

1回答

859閲覧

Tweepyを使ってある特定のアカウントのツイートをDiscordに送信したい

Sopi_Eizo

総合スコア0

Discord

Discordは、ゲーマー向けのボイスチャットアプリです。チャット・通話がブラウザ上で利用可能で、個人専用サーバーも開設できます。通話中でも音楽を流したり、PC画面を共有できるなど多機能な点が特徴です。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2022/08/20 15:19

前提

Python、Discord Botともに初心者です。

tweepy(3.10.0)とDiscord.py(1.7.3)で、tweepyである特定のアカウントのツイートをリアルタイムで取得してDiscord.pyを用いてDiscordサーバーに送信するというものを作ろうとしています。
リアルタイムでのツイートの取得まではうまく行ったのですが、Discordに送信するところが動きません…

実現したいこと

Tweepyでツイートが取得できるたびにDiscordで送る

該当のソースコード

python

1import tweepy 2import discord 3from discord.ext import tasks 4 5TOKEN = '*******************' # TOKENを貼り付け 6CHANNELID = ******************* # チャンネルIDを貼り付け 7 8client = discord.Client() 9 10consumer_key = "*******************" 11consumer_secret = "*******************" 12access_key = "*******************" 13access_secret = "*******************" 14 15auth = tweepy.OAuthHandler(consumer_key, consumer_secret) 16auth.set_access_token(access_key, access_secret) 17api = tweepy.API(auth) 18 19@client.event 20async def on_ready(): 21 print('起動しました') 22 23#override tweepy.StreamListener to add logic to on_status 24class MyStreamListener(tweepy.StreamListener): 25 26 27 def on_status(self, status): 28 print(status.text) 29 tt = status.text 30 async def sendtext(): 31 await channel_sent.send(tt) 32 channel_sent = client.get_channel(CHANNELID) 33 34 35myStreamListener = MyStreamListener() 36myStream = tweepy.Stream(auth = api.auth, listener=myStreamListener) 37 38myStream.filter(follow=["*******************"]) 39 40client.run(TOKEN)

試したこと

下記のようにして10秒ごとにDiscordにTweepyで取得したものを送信するようにして、どこかで変化するからOK!みたいにしてみたのですが、10秒間隔でずっと同じものを送信するだけのスパムになってしまいました。

python

1import tweepy 2import discord 3from discord.ext import tasks 4 5TOKEN = '*******************' # TOKENを貼り付け 6CHANNELID = ******************* # チャンネルIDを貼り付け 7 8client = discord.Client() 9 10consumer_key = "*******************" 11consumer_secret = "*******************" 12access_key = "*******************" 13access_secret = "*******************" 14 15auth = tweepy.OAuthHandler(consumer_key, consumer_secret) 16auth.set_access_token(access_key, access_secret) 17api = tweepy.API(auth) 18 19@client.event 20async def on_ready(): 21 print('起動しました') 22 23#override tweepy.StreamListener to add logic to on_status 24class MyStreamListener(tweepy.StreamListener): 25 26 def on_status(self, status): 27 print(status.text) 28 tt = status.text 29 @tasks.loop(seconds=10) 30 async def send_message_every_10sec(): 31 await channel_sent.send(tt) 32 @client.event 33 async def on_ready(): 34 global channel_sent 35 channel_sent = client.get_channel(CHANNELID) 36 send_message_every_10sec.start() #定期実行するメソッドの後ろに.start()をつける 37 client.run(TOKEN) 38 39myStreamListener = MyStreamListener() 40myStream = tweepy.Stream(auth = api.auth, listener=myStreamListener) 41 42myStream.filter(follow=["*********************"])

よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

channel_sentが定義される前に送信しようとしていることが原因だと思われますので、以下のコードで試してみてください。

py

1async def sendtext(): 2 channel_sent = client.get_channel(CHANNELID) 3 await channel_sent.send(tt)

投稿2022/08/22 08:29

start

総合スコア101

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Sopi_Eizo

2022/08/22 09:03

ありがとうございます。情報不足でした。すみません… TwitterでRTしたものがプリントされるのはできているのですが、まずDiscordBotが起動しません。
start

2022/08/24 13:24

返信遅れて申し訳ございません。 classの中にdiscord.pyのbot部分の実装コードが書かれていると思うので、discord.py関連の処理をclass外にすれば治るかと思われます。
Sopi_Eizo

2022/08/24 14:32

返信ありがとうございます。 下記の①の様に変更してみたのですが、するとDiscord.pyは動かずに、tweepyだけ動くようになりました。 client.run(TOKEN)の位置が悪いのかなと思い、それの位置を変えてみました。(②) すると今度は、Discord.pyは動いたのですがtweepyは動かなくなりました。 ①~~~上記省略~~~ class MyStreamListener(tweepy.StreamListener): def on_status(self, status): print(status.text) tt = status.text async def sendtext(): channel_sent = client.get_channel(CHANNELID) await channel_sent.send(MyStreamListener.on_status.tt) myStreamListener = MyStreamListener() myStream = tweepy.Stream(auth = api.auth, listener=myStreamListener) myStream.filter(follow=["***************"]) client.run(TOKEN) -------------------------------------------- ②~~~上記省略~~~ class MyStreamListener(tweepy.StreamListener): def on_status(self, status): print(status.text) tt = status.text async def sendtext(): channel_sent = client.get_channel(CHANNELID) await channel_sent.send(MyStreamListener.on_status.tt) client.run(TOKEN) myStreamListener = MyStreamListener() myStream = tweepy.Stream(auth = api.auth, listener=myStreamListener) myStream.filter(follow=["***************"])
start

2022/08/24 15:56

夜分遅くに失礼します。 myStreamListener = MyStreamListener() myStream = tweepy.Stream(auth = api.auth, listener=myStreamListener) myStream.filter(follow=["***************"]) をon_readyに入れてみてください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問