1
Fork 0
mirror of https://github.com/wlinator/keep-online-docker.git synced 2024-10-02 17:03:14 +00:00

keeponline init

This commit is contained in:
wlinator 2024-05-07 05:44:31 -04:00
parent 398af44100
commit 55e1c57b49
6 changed files with 112 additions and 0 deletions

8
.env.example Normal file
View file

@ -0,0 +1,8 @@
# your discord token
TOKEN=
# online, dnd or idle
MODE_STATUS=online
# status message
CUSTOM_STATUS=Doing something exciting!

6
.gitignore vendored Normal file
View file

@ -0,0 +1,6 @@
venv/
.idea/
__pycache__/
.env
*.log

11
Dockerfile Normal file
View file

@ -0,0 +1,11 @@
FROM python:3.11
ARG DEBIAN_FRONTEND=noninteractive
WORKDIR /usr/src/app
COPY requirements.txt ./
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
CMD [ "python", "./keeponline.py" ]

8
docker-compose.yml Normal file
View file

@ -0,0 +1,8 @@
services:
core:
build: .
restart: always
environment:
ONLINE_TOKEN: ${TOKEN}
ONLINE_MODE_STATUS: ${MODE_STATUS}
ONLINE_CUSTOM_STATUS: ${CUSTOM_STATUS}

77
keeponline.py Normal file
View file

@ -0,0 +1,77 @@
import os
import sys
import json
import time
import requests
import websocket
usertoken = os.environ.get("ONLINE_TOKEN")
status = os.environ.get("ONLINE_MODE_STATUS")
custom_status = os.environ.get("ONLINE_CUSTOM_STATUS")
headers = {"Authorization": usertoken, "Content-Type": "application/json"}
validate = requests.get('https://discordapp.com/api/v9/users/@me', headers=headers)
if validate.status_code != 200:
print("[ERROR] Your token might be invalid. Please check it again.")
sys.exit()
userinfo = requests.get('https://discordapp.com/api/v9/users/@me', headers=headers).json()
username = userinfo["username"]
discriminator = userinfo["discriminator"]
userid = userinfo["id"]
def onliner(token, status):
ws = websocket.WebSocket()
ws.connect("wss://gateway.discord.gg/?v=9&encoding=json")
start = json.loads(ws.recv())
heartbeat = start["d"]["heartbeat_interval"]
auth = {
"op": 2,
"d": {
"token": token,
"properties": {
"$os": "Windows 10",
"$browser": "Google Chrome",
"$device": "Windows",
},
"presence": {"status": status, "afk": False},
},
"s": None,
"t": None,
}
ws.send(json.dumps(auth))
cstatus = {
"op": 3,
"d": {
"since": 0,
"activities": [
{
"type": 4,
"state": custom_status,
"name": "Custom Status",
"id": "custom",
#Uncomment the below lines if you want an emoji in the status
#"emoji": {
#"name": "emoji name",
#"id": "emoji id",
#"animated": False,
#},
}
],
"status": status,
"afk": False,
},
}
ws.send(json.dumps(cstatus))
online = {"op": 1, "d": "None"}
time.sleep(heartbeat / 1000)
ws.send(json.dumps(online))
def run_onliner():
print(f"Logged in as {username}#{discriminator} ({userid}).")
while True:
onliner(usertoken, status)
time.sleep(50)
run_onliner()

2
requirements.txt Normal file
View file

@ -0,0 +1,2 @@
requests
websocket-client