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

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

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

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

非同期処理

非同期処理とは一部のコードを別々のスレッドで実行させる手法です。アプリケーションのパフォーマンスを向上させる目的でこの手法を用います。

Python

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

解決済

Discord BOTを制御する非同期処理を 同期関数から実行したい

Unico417
Unico417

総合スコア6

Discord

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

非同期処理

非同期処理とは一部のコードを別々のスレッドで実行させる手法です。アプリケーションのパフォーマンスを向上させる目的でこの手法を用います。

Python

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

1回答

0評価

0クリップ

213閲覧

投稿2022/05/22 18:04

編集2022/05/23 23:50

自作でPythonのアプリケーションを作成しています。
その中にDiscord BOTがありますが、その機能をメインのソースコードから分離したくなりました。

Discord BOTを制御する部分を"DiscordModule"として分離・クラス化した時、次のようなエラーが発生しました。
(エラー全文は下に記載してあります。)

cmd

RuntimeError: Timeout context manager should be used inside a task

これを実行する術があればご教示ください。

ソースコード

ソースコードは、したいことを表現するために簡略化させて頂きました。

main.py (制御する側)

python

# main.py import asyncio from discordmodule import DiscordModule # 自作 discordmodule.py class HostModule: def __init__(self): self.bot = DiscordModule(command_prefix='/') self.task() # DiscordModule.send_message() (非同期関数)を使って特定チャンネルにメッセージを送りたい def task(self): asyncio.run(self.bot.send_message(message='メッセージ', channel=123456789)) instance = HostModule() instance.bot.run('トークン')

discordmodule.py (制御される側)

python

# discordmodule.py import traceback from discord.ext import commands class DiscordModule(commands.Bot): def __init__(self, command_prefix): pass async def send_message(self, message:str, channel:int): ch = self.get_channel(channel) # discord.TextChannelオブジェクトは取得確認済み try: await ch.send(message) # ここでエラー except: print(traceback.format_exc())

エラー

cmd

Traceback (most recent call last): File "C:\Works\Python\schedule\main.py", line 11, in task asyncio.run(self.bot.send_message(message=sc['message'], channel=int(sc['channel']), mention=sc['mention'])) File "C:\Users\User\AppData\Local\Programs\Python\Python310\lib\asyncio\runners.py", line 44, in run return loop.run_until_complete(main) File "C:\Users\User\AppData\Local\Programs\Python\Python310\lib\asyncio\base_events.py", line 641, in run_until_complete return future.result() File "C:\Works\Python\schedule\discordmodule.py", line 10, in send_message await ch.send(message) File "C:\Users\User\AppData\Local\Programs\Python\Python310\lib\site-packages\discord\abc.py", line 1065, in send data = await state.http.send_message(channel.id, content, tts=tts, embed=embed, File "C:\Users\User\AppData\Local\Programs\Python\Python310\lib\site-packages\discord\http.py", line 192, in request async with self.__session.request(method, url, **kwargs) as r: File "C:\Users\User\AppData\Local\Programs\Python\Python310\lib\site-packages\aiohttp\client.py", line 1117, in __aenter__ self._resp = await self._coro File "C:\Users\User\AppData\Local\Programs\Python\Python310\lib\site-packages\aiohttp\client.py", line 448, in _request with timer: File "C:\Users\User\AppData\Local\Programs\Python\Python310\lib\site-packages\aiohttp\helpers.py", line 635, in __enter__ raise RuntimeError( RuntimeError: Timeout context manager should be used inside a task

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

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

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Discord

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

非同期処理

非同期処理とは一部のコードを別々のスレッドで実行させる手法です。アプリケーションのパフォーマンスを向上させる目的でこの手法を用います。

Python

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