Files
payphone/run.py
T
Nyeki.py 29188e53c1 perf(bot): ⚡ Use one process per shard.
Start one process per shard and initialize a new one if any of them fails.
2024-10-22 00:42:25 -03:00

52 lines
1.1 KiB
Python

def shard(shard_id: int, shard_count: int) -> None:
"""Starts a new shard.
Args:
shard_id (int): The shard's ID.
shard_count (int): The total amount of shards.
"""
from payphone.bot import bot
from payphone.core import config
bot.shard_ids = [shard_id]
bot.shard_count = shard_count
bot.run(config.TOKEN)
if __name__ == "__main__":
import multiprocessing as mp
import time
import httpx
from payphone.core import config
response = httpx.get(
"https://discord.com/api/v10/gateway/bot",
headers={"Authorization": f"Bot {config.TOKEN}"},
)
info = response.json()
shard_count = info["shards"]
ps: list[mp.Process] = [
mp.Process(target=shard, args=(i, shard_count)) for i in range(shard_count)
]
for p in ps:
p.start()
time.sleep(5)
while True:
for i in range(shard_count):
if not ps[i].is_alive():
ps[i] = mp.Process(target=shard, args=(i, shard_count))
ps[i].start()
time.sleep(5)