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

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

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

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

Python

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

Q&A

解決済

1回答

1189閲覧

DiscordのBotでオンラインが3人以上だと特定のテキストチャンネルに絵文字を送ってくれる

Winter_1214

総合スコア11

Discord

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

Python

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

0グッド

1クリップ

投稿2020/06/14 10:00

編集2020/06/14 10:11

前提・実現したいこと

DiscordのBotをつくっていて、2時間に一回オンラインが3人以上いると、特定のテキストチャンネルに絵文字を送信するというようなものです。

発生している問題・エラーメッセージ

エラーが出てないので困っています。

該当のソースコード

import discord

client = discord.Client()

async def login_status_message():
online_members = [member.name for member in client.get_all_members() if member.status == discord.Status.online]
if len(online_members) == 3:
m = logined_member[0] + "と" + logined_member[1] + "と" + logined_member[2] + "と" + logined_member[3] + "がonlineです。"
await client.get_channel('チャンネルID').send(m)

client.run("自分のBotのtoken")

試したこと

オンラインの取得の方法を色々と試してみましたが、動きませんでした。

補足情報(FW/ツールのバージョンなど)

python3.8

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

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

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

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

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

guest

回答1

0

ベストアンサー

まずソースは<code>を使って書いていただけるといいかと思います。
pythonは特にインデントが大事な言語なので。

質問に書かれているソースはすべてでしょうか?
これがすべてであるならば、そもそも

python

1async def login_status_message():

を呼び出している部分がないのでbotがオンラインになるだけで何も動かないかと思います。
詳しくは下記リンクを読んでいただければと思います。
https://qiita.com/1ntegrale9/items/9d570ef8175cf178468f

めんどうくさいので全部は修正しませんが大体はこんな感じかと思います。

python

1import discord 2 3client = discord.Client() 4 5#async def login_status_message(): ここは書き換え 6@client.event 7async def on_ready():#botがオンラインになったら実行される 8 #↓あってはいますがこのままだとbotがuserにカウントされるので条件追記(member.bot == false) 9 online_members = [member.name for member in client.get_all_members() if member.status == discord.Status.online and member.bot == False] 10 #if len(online_members) == 3:これだと3人ぴったししか反応しない 11 #m = logined_member[0] + "と" + logined_member[1] + "と" + logined_member[2] + "と" + logined_member[3] + "がonlineです。" 12 if len(online_members) >= 3:#オンラインが3人以上だったら 13 m="" 14 for user in online_members:#online_membersの中を一つずつuserに取り出す 15 m += user + "と" 16 m+= "がおんらいんだよ" 17 await client.get_channel(チャンネルID).send(m)#送信 18 19client.run("ABC.XYZ(トークン)")

こんな感じかな。
これだとbotログイン時に一回しか実行されないので、あとは2時間ごとのトリガー作るか
無限ループ&二時間ウエイトみたいな感じで書けばだいたいやりたいことはできるかと思います。

投稿2020/06/14 12:08

sanaN

総合スコア38

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

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

Winter_1214

2020/06/14 14:04

これがすべではないです。やりたかったオンラインのはできるようになりました。 いろいろとご迷惑おかけしましたが、本当にありがとうございました。 今回pythonを昨日からはじめ、この作業が初めてでどうしたらできるのか よく分からなかったので、とても参考になりました。 また、質問させていただくことが多々あると思うので、その時もよろしくお願いいたします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問