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

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

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

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

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

3176閲覧

discord.py サーバー外のユーザーにDMを送信する方法が分からない

KeilyX07

総合スコア29

Discord

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

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

1クリップ

投稿2020/08/11 09:12

外部のユーザーにDMを送信したい

サーバー内のユーザーであれば

Python

1 user = bot.get_user(userid) 2 await user.send('テストメッセージ')

これで送信できるのですが、サーバー外の人だとこれでは送信できませんでした。調べてもサーバー内であれば大量に情報が出てくるのですが、外部はわからなくてお力をお貸しいただきたくここに投稿しております。

全文

Python

1import discord 2import random 3from discord.ext import commands 4from discord.utils import get 5 6token = "TOKEN" 7bot = commands.Bot(command_prefix = '.') 8 9@bot.event 10async def on_ready(): 11 print('Ready') 12 13@bot.command(pass_context=True) 14async def dm(ctx): 15 user = bot.get_user(userid) 16 await user.send('Hey guys! We have a gift for you!') 17

外部に送信したときのエラー

Error

1Ignoring exception in command dm: 2Traceback (most recent call last): 3 File "D:\LAB\venv\lib\site-packages\discord\ext\commands\core.py", line 83, in wrapped 4 ret = await coro(*args, **kwargs) 5 File "D:/LAB/vote.py", line 41, in dm 6 await user.send('Hey guys! We have a gift for you!') 7AttributeError: 'NoneType' object has no attribute 'send' 8 9The above exception was the direct cause of the following exception: 10 11Traceback (most recent call last): 12 File "D:\LAB\venv\lib\site-packages\discord\ext\commands\bot.py", line 892, in invoke 13 await ctx.command.invoke(ctx) 14 File "D:\LAB\venv\lib\site-packages\discord\ext\commands\core.py", line 797, in invoke 15 await injected(*ctx.args, **ctx.kwargs) 16 File "D:\LAB\venv\lib\site-packages\discord\ext\commands\core.py", line 92, in wrapped 17 raise CommandInvokeError(exc) from exc 18discord.ext.commands.errors.CommandInvokeError: Command raised an exception: AttributeError: 'NoneType' object has no attribute 'send'

宜しくおねがいします。

環境

Windows 10 x64
PyCharm
Discord rewrite 1.4.1

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

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

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

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

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

guest

回答1

0

ベストアンサー

py

1user = discord.utils.get(client.users, id=ID) 2await user.send("test")

これでできると思います。

discord.utils.getについては
こちらを見てください。

追記

py

1import discord 2import random 3from discord.ext import commands 4from discord.utils import get 5 6token = "" 7bot = commands.Bot(command_prefix = '.') 8 9@bot.event 10async def on_ready(): 11 print('Ready') 12 13@bot.command(pass_context=True) 14async def dm(ctx): 15 user = discord.utils.get(bot.users, id=609388801168769034) 16 await user.send('Hey guys! We have a gift for you!') 17 18bot.run(token)

投稿2020/08/11 09:28

編集2020/08/11 09:37
Reply

総合スコア21

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

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

KeilyX07

2020/08/11 09:34

Ignoring exception in command dm: Traceback (most recent call last): File "D:\LAB\venv\lib\site-packages\discord\ext\commands\core.py", line 83, in wrapped ret = await coro(*args, **kwargs) File "D:/LAB/vote.py", line 41, in dm await user.send('Hey guys! We have a gift for you!') AttributeError: 'NoneType' object has no attribute 'send' 同じエラーでできませんでした
Reply

2020/08/11 09:37 編集

おや、私の環境では動作したのですがなぜでしょう。 実行したコードは追記を見てください。
KeilyX07

2020/08/11 09:48

追記いただいたコードをコピー・アンド・ペーストして実行してみましたが同じエラーでした。※トークンは書き換えています。 ちなみに外部というのは、そのサーバーにはいない人に対して送信しています。 サーバー内のユーザーIDで試すと実行できました。
Reply

2020/08/11 10:18

AttributeError: 'NoneType' object has no attribute 'send' 調べたところこのエラーログはユーザーが見つからない時に出るエラーのようでした。 まず前提として一つでもbotと同じサーバーにそのユーザーが所属している必要があるのですが、そこは大丈夫ですか? Discordの使用上一つも同じサーバーに所属していないユーザーにDMは送信できません。
KeilyX07

2020/08/11 15:13

なるほど理解しました。(同じサーバーに所属していないユーザーにDMを送信できないことを初めて知りました。)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問