Its*_*1an 1 python timeout discord.py
几个月前,我想到了为我朋友的服务器制作一个功能性不和谐机器人的想法。我的朋友问我是否可以发出会员超时命令,所以我开始了我的研究。由于discord.py将不再更新,这个问题可能毫无用处并且浪费时间,但无论如何我真的很想尝试一下。我知道 Stack Overflow 是关于修改代码的,而不是代码编写服务,但我真的不知道应该如何做到这一点。
我的想法是在指定时间内为成员提供“静音”或“超时”角色,并在计时器停止后再次将其删除,但随后我应该使用 while 循环,导致其余代码不再可访问,使用该函数也是如此time.sleep。
我在互联网上找不到任何关于此的信息,所以我唯一的希望是 Stack Overflow。我不希望您在答案中编写整个程序,只是在我可能正在寻找的地方,以便我可以自己弄清楚其余的内容。
提前致谢!
Discord 最近发布了一个超时功能,该功能非常好,解决了创建/删除没有发送消息权限的角色的问题。Discord.py 可能不会收到更新,但这并不能阻止您向 Discord API 编写自己的请求,或者您也可以使用已经实现此功能的分支之一。
这是我为使其工作而编写的一个简单的非机器人脚本:
import pprint
import requests
import datetime
BASE = "https://discord.com/api/v9/"
TOKEN = "BOT TOKEN"
def timeout_user(*, user_id: int, guild_id: int, until: int):
endpoint = f'guilds/{guild_id}/members/{user_id}'
headers = {"Authorization": f"Bot {TOKEN}"}
url = BASE + endpoint
timeout = (datetime.datetime.utcnow() + datetime.timedelta(minutes=time_in_mins)).isoformat()
json = {'communication_disabled_until': timeout}
session = requests.patch(url, json=json, headers=headers)
if session.status_code in range(200, 299):
return session.json()
else:
return print("Did not find any\n", session.status_code)
guild_id = 231
user_id = 123
time_in_mins = 2
member = timeout_user(user_id=user_id, guild_id=guild_id,until=time_in_mins)
pprint.pprint(member)
Run Code Online (Sandbox Code Playgroud)
{'avatar': None,
'communication_disabled_until': '2021-12-23T09:49:58.965896+00:00',
'deaf': False,
'is_pending': False,
'joined_at': '2021-12-23T09:06:30.927000+00:00',
'mute': False,
'nick': None,
'pending': False,
'premium_since': None,
'roles': [],
'user': {'avatar': 'avatar hash string',
'discriminator': '1234',
'id': 'Member ID',
'public_flags': 128,
'username': 'Member Name'}}
Run Code Online (Sandbox Code Playgroud)
由于discord.py是异步的,您可能需要异步代码。这是一种快速集成
import aiohttp
import discord
import datetime
import warnings
from discord.ext import commands
warnings.filterwarnings("ignore", category=DeprecationWarning)
intents = discord.Intents.all()
bot = commands.Bot(command_prefix=['$',], intents=intents)
bot.session = aiohttp.ClientSession()
@bot.event
async def on_ready():
print(f"{bot.user.name} is ready to go!")
async def timeout_user(*, user_id: int, guild_id: int, until):
headers = {"Authorization": f"Bot {bot.http.token}"}
url = f"https://discord.com/api/v9/guilds/{guild_id}/members/{user_id}"
timeout = (datetime.datetime.utcnow() + datetime.timedelta(minutes=until)).isoformat()
json = {'communication_disabled_until': timeout}
async with bot.session.patch(url, json=json, headers=headers) as session:
if session.status in range(200, 299):
return True
return False
@bot.command()
async def timeout(ctx: commands.Context, member: discord.Member, until: int):
handshake = await timeout_user(user_id=member.id, guild_id=ctx.guild.id, until=until)
if handshake:
return await ctx.send(f"Successfully timed out user for {until} minutes.")
await ctx.send("Something went wrong")
bot.run("BOT TOKEN")
Run Code Online (Sandbox Code Playgroud)
您可以在此处阅读有关端点的更多信息
| 归档时间: |
|
| 查看次数: |
16454 次 |
| 最近记录: |