DiscordのAFKタイムアウト:非アクティブチャンネルのしくみとオフにする方法
DiscordのAFKタイムアウトはサーバーの設定です。サーバーにAFK用の非アクティブチャンネルがあると、ボイスで1分、5分、15分、30分、1時間何もしなかったメンバーはそこに移され、ミュートされます。タイムアウトを変えたりオフにしたりできるのはサーバーの管理者だけで、メンバーにはできません。
On this page
DiscordのAFKタイムアウトは、サーバーごとの設定です。サーバーのオーナーが Inactive Channel(AFK用の非アクティブチャンネル)を選んでいると、ボイスチャンネルで Inactive Timeout(非アクティブタイムアウト)のあいだ何もしなかった人を、Discordはそのチャンネルに移し、そこではミュートされます。タイムアウトは1分、5分、15分、30分、1時間のどれかで、それより長くはできません。変えたりオフにしたりできるのは「サーバー管理」の権限を持つ人だけで、Inactive Channelを「No Inactive Channel」にするとオフになります。メンバーはオフにできません。アクティブでいるか、AFKチャンネルのないサーバーを使うしかありません。
タイマーは設定より遅く動きます。2026年10月22日にDiscord自身のアプリのコードを読みました。移動を行うのはデスクトップアプリで、それもあなたが退席中(Idle)になったあとだけです。退席中になるのは、パソコンの操作が10分ないときか、画面をロックしたときです。そのうえで、最後の操作からInactive Timeoutがたったときに移します。つまり1分や5分のタイムアウトは、画面をロックしない限り10分と同じように働きます。
AFKタイムアウトは、黄色い月の退席中の状態とは別のものです。そちらは個人のもので、キーボードとマウスの操作で決まります。Discordの退席中の意味にまとめています。
DiscordのAFKチャンネルのしくみ
- Inactive Channelが設定されたサーバーで、ボイスチャンネルにいます。
- DiscordがInactive Timeoutのあいだ、あなたの動きを見ません。
- DiscordがあなたをInactive Channelに移します。ボイスにはつながったままですが、そこでは話せません。
- 戻ったら、どれかのボイスチャンネルをクリックすると入り直せます。
何が「動き」に数えられるかは、下のコードにあります。パソコンのどこでのキーボードとマウスの操作も数えられ、話すことも数えられます。マイクが声を送ると、アプリはあなたをアクティブにします。自分をミュートすると、それは止まります。だから、パソコンを使い続けている人や話し続けている人はそのままで、席を離れた人は移されます。
AFKチャンネルには、コストの理由もあります。Discordのフィードバックフォーラムの回答によると、ボイスで放置している人にもストリームは届き続け、その帯域にDiscordはお金を払っています。放置しているメンバーをミュートのチャンネルに移すと、それが節約できます。
Discordのコードがすること(2026年10月22日に確認)
ここまでのルールは、Discordがdiscord.com/appで配っているJavaScriptから読み取ったものです。このファイルには、デスクトップアプリの退席中とAFKのロジックが入っています。次のスクリプトはそれをダウンロードし、いつ退席中になり、いつ移されるかを決める行を表示します。
import re, urllib.request
UA = {"User-Agent": "Mozilla/5.0 (Macintosh) Chrome/141"}
get = lambda u: urllib.request.urlopen(urllib.request.Request(u, headers=UA), timeout=60).read().decode("utf-8", "ignore")
html = get("https://discord.com/app")
print("build", re.search(r"BUILD_NUMBER\W+(\d+)", html).group(1))
web = [s for s in re.findall(r'src="(/assets/[^"]+\.js)"', html) if "/web." in s][0]
js = get("https://discord.com" + web)
def show(label, pattern):
m = re.search(pattern, js)
print(f"{label}: {m.group(0) if m else 'not found'}")
show("idle after (ms)", r"\b\w{1,3}=6e5(?=,)")
show("idle rule", r'Date\.now\(\)-\w+>\w+\.\w+\|\|\w+\(\)\?\w+\|\|\w+\.\w+\.dispatch\(\{type:"IDLE",idle:!0')
show("idle at once when", r"function \w+\(\)\{return \w+\|\|\w+\|\|\(0,\w+\.isAndroid\)\(\)&&\w+\}")
show("Android background flag", r"APP_STATE_UPDATE:function\(e\)\{let\{state:t\}=e;return \w+=t===\w+\.\w+\.BACKGROUND")
show("desktop app reads system idle every", r"setTimeout\(e,10\*\w+\.\w+\.Millis\.SECOND\)")
show("desktop screen lock", r'powerMonitor\.on\("lock-screen",\(\)=>\{\w+=!0')
show("browser checks every", r"setInterval\(\w+,30\*\w+\.\w+\.Millis\.SECOND\)")
show("browser input", r'addEventListener\("mouseup",\w+\),window\.addEventListener\("wheel",\w+\),window\.addEventListener\("keypress",\w+\)')
show("AFK move runs only in", r"handleIdleUpdate\(\)\{let \w+=\w+\.\w+\.getIdleSince\(\);if\(!\w+\.isPlatformEmbedded\)return")
show("AFK move timer", r"\w+\.start\(\w+\+\w+\.afkTimeout\*\w+\.\w+\.Millis\.SECOND-Date\.now\(\)")
show("leave voice after idle (ms)", r"\w+\.start\(18e6,\(\)=>\{\w+\.default\.selectVoiceChannel\(null\)\}\)")
show("speaking counts as input", r'SPEAKING:function\(e\)\{let\{userId:t,speakingFlags:n\}=e;return n!==\w+\.\w+\.NONE&&t===\w+\.default\.getId\(\)&&\w+\(\{\}\)')
show("no AFK move while streaming", r'for\(let e of\(\w+\.stop\(\),\w+\.stop\(\),\w+\.\w+\.getAllActiveStreams\(\)\)\)if\(e\.state!==\w+\.\w+\.ENDED\)return')
2026年10月22日の出力:
build 643186
idle after (ms): n3=6e5
idle rule: Date.now()-f>A.sdF||S()?I||l.h.dispatch({type:"IDLE",idle:!0
idle at once when: function S(){return T||m||(0,_.isAndroid)()&&g}
Android background flag: APP_STATE_UPDATE:function(e){let{state:t}=e;return g=t===A.g6G.BACKGROUND
desktop app reads system idle every: setTimeout(e,10*u.A.Millis.SECOND)
desktop screen lock: powerMonitor.on("lock-screen",()=>{m=!0
browser checks every: setInterval(N,30*u.A.Millis.SECOND)
browser input: addEventListener("mouseup",e),window.addEventListener("wheel",e),window.addEventListener("keypress",e)
AFK move runs only in: handleIdleUpdate(){let e=Vz.A.getIdleSince();if(!eV.isPlatformEmbedded)return
AFK move timer: VX.start(e+n.afkTimeout*iI.A.Millis.SECOND-Date.now()
leave voice after idle (ms): Vq.start(18e6,()=>{t5.default.selectVoiceChannel(null)})
speaking counts as input: SPEAKING:function(e){let{userId:t,speakingFlags:n}=e;return n!==h.ME.NONE&&t===E.default.getId()&&O({})
no AFK move while streaming: for(let e of(VX.stop(),Vq.stop(),d5.A.getAllActiveStreams()))if(e.state!==W.XYD.ENDED)return
各行の意味を順に書きます。
isPlatformEmbedded)だけです。最後の操作の時刻にサーバーのInactive Timeoutを足したタイマーをかけ、時間が来るとInactive Channelに移します。すでに過ぎているタイマーはすぐに動きます。私たちはコードを読みましたが、実際のサーバーで移動の時間を測ってはいません。ブラウザのタブではこのコードの移動は動きません。ブラウザの人が別の方法で移されるかどうかは試していません。
DiscordのAFKタイムアウトの選択肢
| アプリでの設定 | APIの値(afk_timeout、秒) | 向いている場面 |
|---|---|---|
| 1分 | 60 | ボイスチャンネルを空けておきたいにぎやかなサーバー |
| 5分 | 300 | Discord自身のAPIの例にある値 |
| 15分 | 900 | たいていのコミュニティのサーバー |
| 30分 | 1800 | 勉強やもくもく作業のサーバー |
| 1時間 | 3600 | 最大。「なし」はない |
Discordの開発者向けドキュメントは、使える値をこの5つだけとしています。誰も移さないようにするには、もっと長いタイムアウトを探すのではなく、Inactive Channelを外します。
DiscordのAFKをオフにする・変える方法(サーバー管理者向け)
「サーバー管理」の権限が必要です。
ボットもAPIで同じことができます。discord.pyで、「サーバー管理」の権限を持つボットの場合です。
# set the AFK channel and a 30-minute timeout
await guild.edit(afk_channel=afk_voice_channel, afk_timeout=1800)
# turn AFK off
await guild.edit(afk_channel=None)
タイムアウトは60、300、900、1800、3600のどれかでなければならず、ほかの値は拒否されます。
移されずにDiscordでAFKでいる方法
メンバーで、サーバーにAFKチャンネルがあるなら、まっとうな方法は3つです。
自分をミュートしたりスピーカーをミュートしたりしても、動きには数えられません。ほかの人に聞こえるものが変わるだけで、Discordがあなたをアクティブと見るかどうかは変わりません。移されたあとにボイスチャンネルに戻るのはいつでも自由で、AFKチャンネルは罰ではありません。
キーボードから離れても、いなくなったように見せたくないなら、状態を手で設定します。退席中、取り込み中、オフライン表示はDiscordのステータスアイコンの意味にあります。
DiscordのAFK、退席中、オフライン表示
| AFKチャンネル | 退席中(黄色い月) | オフライン表示 | |
|---|---|---|---|
| 決めるもの | サーバーのルール | 操作がないことからDiscordが、またはあなたが | あなた |
| 対象 | そのサーバーのボイスチャンネル | どこでもあなたの状態 | どこでもあなたの状態 |
| 効果 | 移されてミュートされる | 月のアイコン。メッセージは届く | オフラインに見える |
| 解除 | 管理者がInactive Channelを外す | Discordを使うか、別の状態にする | 別の状態を選ぶ |
退席中になるのは、パソコンでキーボードとマウスの操作が10分ないときです(Discordのコードでは600,000ミリ秒)。ルールの全体と、Discordを退席中にしない方法はDiscordの退席中の意味にあります。Discordのオフラインに見せる方法の違いはDiscordのオフライン表示とオフラインの違いにあります。
DiscordのAFKについての質問
DiscordのAFKタイムアウトとは? メンバーがボイスで何もしないまま、サーバーのInactive Channelに移されるまでの時間で、1分、5分、15分、30分、1時間のどれかです。デスクトップアプリでは、移動はあなたが退席中になるのも待つので、画面をロックしない限り、実際には10分より早くなることはありません。
Discordは放置しているとボイスから追い出す? デスクトップアプリでは追い出します。退席中になってから5時間で、AFKチャンネルのないサーバーでもボイスチャンネルから抜けます。
DiscordのAFKをオフにするには? サーバーを運営しているなら、サーバー設定でInactive ChannelをNo Inactive Channelにします。メンバーにはできません。
DiscordのAFKタイムアウトを1時間より長くできる? できません。1時間が最大です。人を移すのをやめるには、Inactive Channelを外します。
AFKチャンネルで話せないのはなぜ? DiscordはInactive Channelにいる全員をミュートします。話すには別のボイスチャンネルに入ります。
関連記事
Discordの退席中(Idle)とは?黄色い月の意味
Discordの退席中(Idle)は黄色い三日月で、サインインしているのにパソコンを約10分使っていないか、AndroidでDiscordのアプリを離れたか、自分で退席中にしたという意味です。オンラインとの違い、色とアイコン、何分でなるか、サーバーのAFKタイムアウトの働き。
Discordでステータスを変えると通知される?
オンライン、退席中、取り込み中を切り替えても、通知は送られません。ただし、Discordのスマホアプリを使っているフレンドには、あなたがオンラインになったとき、新しいカスタムステータスを設定したとき、ゲームを始めたときにプッシュ通知が届くことがあり、送る側では止められません。受け取る側はオフにでき、送る側はオンライン状態を隠すことができます。
Discordでオフラインのはずの人がオンラインに見えるのはなぜ?
Discordは、その人がサインインしているすべての端末のうち、いちばん活発な状態を表示します。PCのトレイでDiscordが動いていたり、ブラウザーのタブが開いていたりすると、スマホを閉じても緑のままです。原因、自分の端末の確かめ方、逆に自分がオフラインに見えるバグをまとめます。