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 개발자 문서는 이 다섯 값만 허용된다고 적고 있습니다. 아무도 옮기지 않으려면 더 긴 타임아웃을 찾지 말고 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 채널이 있다면, 정직한 방법은 세 가지입니다.
마이크를 음소거하거나 소리를 끄는 것은 활동으로 치지 않습니다. 다른 사람이 듣는 것이 바뀔 뿐, Discord가 나를 활동 중으로 보는지는 바뀌지 않습니다. 옮겨진 뒤 음성 채널로 돌아가는 것은 언제든 됩니다. AFK 채널은 벌이 아닙니다.
키보드에서 떨어져 있어도 사라진 것처럼 보이고 싶지 않다면 상태를 직접 정하세요. 자리 비움, 방해 금지, 오프라인 표시는 Discord 상태 아이콘의 뜻에 있습니다.
Discord의 AFK, 자리 비움, 오프라인 표시
| AFK 채널 | 자리 비움(노란 달) | 오프라인 표시 | |
|---|---|---|---|
| 정하는 쪽 | 서버 규칙 | 입력이 없으면 Discord가, 또는 내가 | 나 |
| 적용 범위 | 그 서버의 음성 채널 | 모든 곳의 내 상태 | 모든 곳의 내 상태 |
| 효과 | 옮겨지고 음소거됨 | 달 아이콘, 메시지는 계속 옴 | 오프라인처럼 보임 |
| 끄는 법 | 관리자가 Inactive Channel을 없앰 | Discord를 쓰거나 다른 상태로 바꿈 | 다른 상태를 고름 |
자리 비움은 컴퓨터에서 키보드나 마우스 입력이 10분 없으면 켜집니다(Discord 코드로는 600,000ms). 전체 규칙과 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분쯤 쓰지 않았거나, 안드로이드 휴대폰에서 Discord 앱을 벗어났거나, 직접 자리 비움을 골랐다는 뜻입니다. 온라인과의 차이, 색과 아이콘, 몇 분 만에 바뀌는지, 서버 AFK 시간 제한이 하는 일.
Discord에서 상태를 바꾸면 알림이 갈까?
온라인, 자리 비움, 방해 금지를 오가도 알림은 가지 않습니다. 하지만 Discord 모바일 앱을 쓰는 친구에게는 내가 온라인이 될 때, 새 사용자 지정 상태를 정할 때, 게임을 시작할 때 푸시 알림이 갈 수 있고, 보내는 쪽에서는 막을 수 없습니다. 받는 쪽은 끌 수 있고, 보내는 쪽은 오프라인 표시를 쓸 수 있습니다.
Discord에서 오프라인인 사람이 온라인으로 보이는 이유
Discord는 그 사람이 로그인한 모든 기기 중 가장 활발한 상태를 보여 줍니다. PC 트레이에서 Discord가 돌거나 브라우저 탭이 열려 있으면 휴대폰을 닫아도 초록색입니다. 원인, 내 기기 확인법, 반대로 내가 오프라인으로 보이는 버그를 정리했습니다.