python - 如何使此命令适用于所有用户
问题描述
伙计们,我的命令仅适用于我的机器人,有人可以帮助我吗?
更好地解释:
*fake @mybot blabla (works)
*fake @SrWonka blabla (dotn work)
代码:
Soucebin:https ://sourceb.in/rkhH6YdTCx
import discord
import re
from discord.ext import commands
class fake(commands.Cog):
def _init_(self, client):
self.client = client
@commands.command()
async def fake(self, ctx, userid: str, *, message):
await ctx.message.delete()
userid = re.sub('[^0-9]', '', userid)
webhooks = await ctx.message.channel.webhooks()
noneWH = True
server = ctx.message.guild
for member in server.members:
if member.id == int(userid):
user = member
for webhook in webhooks:
if(webhook.name == "boteco"):
if user.nick == None:
await webhook.send(content=message, username=user.name ,avatar_url=user.avatar_url)
else:
await webhook.send(content=message, username=user.nick ,avatar_url=user.avatar_url)
noneWH = False
if noneWH:
webhook = await ctx.message.channel.create_webhook(name="boteco")
if user.nick == None:
await webhook.send(content=message, username=user.name ,avatar_url=user.avatar_url)
else:
await webhook.send(content=message, username=user.nick ,avatar_url=user.avatar_url)
def setup(client):
client.add_cog(fake(client))
解决方案
做出改变:
您获取用户的方式不是我使用的最佳方式,
Typing.union
您可以查看下面的文档。display_name
如果没有,它将显示昵称,如果没有,它将显示用户名。discord.utils.get
获取 webhook 而不是循环
这是编辑的代码:
class fake(commands.Cog):
def _init_(self, client):
self.client = client
@commands.command()
async def fake(self, ctx, user: typing.Union[discord.Member, discord.User], *, message):
# await ctx.message.delete()
webhooks = await ctx.message.channel.webhooks()
# get the webhook if it is there
webhook = discord.utils.get(webhooks, name="boteco")
if webhook:
await webhook.send(content=message, username=user.display_name, avatar_url=user.avatar_url)
else:
webhook = await ctx.message.channel.create_webhook(name="boteco")
await webhook.send(content=message, username=user.display_name ,avatar_url=user.avatar_url)
首先是为另一个用户。
其次是机器人本身。
文件:
Typing.Union 是一种特殊的类型提示,它允许命令采用任何特定类型而不是单数类型。
返回用户的显示名称。对于普通用户,这只是他们的用户名,但如果他们有公会特定的昵称,则返回该昵称。
一个帮助器,它返回满足在 attrs 中传递的所有特征的迭代中的第一个元素。这是一个替代方案
find().
推荐阅读
- php - 在订单电子邮件 woocommerce 中添加新添加的帐单地址和送货地址字段
- pandas - 将附加信息(数据)附加到数据框列值
- json - 验证架构属性时,没有带有键的架构或带有 AJV 的引用
- javascript - 为什么用户加入房间时视频不显示?
- reactjs - react-table 从数据中的多个电子邮件地址获取默认电子邮件地址(打字稿)
- python - Python 请求/httpx 响应和垃圾收集
- python - Manim 展示乳胶桌
- python - 加载 LSA sklearn 向量
- azure - 将计算实例添加到 Azure Synapse(专用池)
- python - 提取没有 span 类属性和相同 div 类属性的 html