python-3.x 获取discord通道中的活动线程(Discord.py/Pycord)

puruo6ea  于 2023-11-20  发布在  Python
关注(0)|答案(1)|浏览(112)

我在一个discord频道上获取活动线程时遇到问题。没有太多关于它的信息,或者我只是找不到它。所以也许它甚至不可能是idk
我的代码:

import discord
from tools.config import TOKEN

bot = discord.Bot()

@bot.event
async def on_ready():
    print(f"{bot.user} is ready and online!")

@bot.slash_command(name="chat", description="some desc")
async def chat(ctx, msg):
    channel = bot.get_channel(CHANNEL_ID)
    user_name = ctx.author
    await ctx.response.defer(ephemeral=True)
    thread = await channel.create_thread(name=f"Thread was created {user_name}", type=None)
    await thread.send("Message in a thread")

    await ctx.respond(f'Some message with tagging after creating a thread. {user_name.mention}')

bot.run(TOKEN)

字符串
我试图实现的是这样的:用户执行斜杠命令,然后机器人创建一个线程,所有与用户的通信都在其中完成,但在创建线程机器人之前需要验证用户不在当前通道中的任何活动线程中。为此,我需要获取当前通道中的活动线程。

xoshrz7s

xoshrz7s1#

首先,请确保您使用的是Discord.py 2.0+,其中有一些重要的更改和功能,只有最新版本才有。
我想我找到了一个解决你问题的方法。首先使用channel.threads从通道中获取所有线程,如果我理解得很好,这已经获取了未存档的线程(这意味着它们仍然处于活动状态),然后检查您的用户是否在线程成员之间。

async def user_has_no_thread(ctx):
    threads = ctx.channel.threads
    if none(ctx.author in thread.members for thread in threads):
        return True
    return False

字符串
你也可以定义一个更快的auto_archive_duration当使用channel.create_thread(),以确保他们将很快被存档,默认情况下是大约3天,我猜。看看这里,如果你想知道更多关于功能。
也要确保你有使成员的意图,这一工程

intents = discord.Intents.default()
intents.members = True
client = discord.Client(intents=intents)

相关问题