@VickR0mE

Как решить ошибку TypeError: Client.fetch_guild() takes 2 positional arguments but 3 were given?

Пытаюсь интегрировать своего бота в несколько серверов, в целом все работает, кроме одного из когов. Пробовал добавить self.guild1, но выдавалась новая ошибка, уже во время использования команды. Есть ли другой способ исправить эту ошибку?
Код:

import disnake
from disnake.ext import commands
from disnake.ext import tasks
from func import *
import datetime

class Tempmute(commands.Cog):
def __init__(self, bot):
self.bot = bot

@tasks.loop()
async def check_mutes(self):
current = datetime.datetime.now()
mutes = load_json("C:/Users/murat/OneDrive/Рабочий стол/Ботинок ДС/jsons/mutes.json")
users, times = list(mutes.keys()), list(mutes.values())
for i in range(len(times)):
time = times[i]
unmute = datetime.datetime.strptime(str(time), "%c")
if unmute < current:
user_id = users[times.index(time)]
try:
member = await self.guild.fetch_member(int(user_id))
await member.remove_roles(self.mutedrole)
mutes.pop(str(member.id))
except disnake.NotFound:
pass
write_json("C:/Users/murat/OneDrive/Рабочий стол/Ботинок ДС/jsons/mutes.json", mutes)

@commands.command(name="mute", aliases=["мут"], brief="Мутит выбранного участника.", usage="mute <@user> ")
@commands.has_permissions(administrator=True)
async def mute(self, ctx, member: disnake.Member = None, time: str = None, *, reason="None"):
if member.bot is True:
return await ctx.send("Вы не можете замутить бота!")
if member == ctx.author:
return await ctx.send("Вы не можете замутить себя!")
if len(reason) > 150:
return await ctx.send("Причина слишком длинная!")
if member and member.top_role.position >= ctx.author.top_role.position:
return await ctx.send("Вы не можете замутить человека с ролью выше вашей!")
if time is None:
return await ctx.send("Вы не указали время!")
else:
try:
seconds = int(time[:-1])
duration = time[-1]
if duration == "s":
pass
if duration == "m":
seconds *= 60
if duration == "h":
seconds *= 3600
if duration == "d":
seconds *= 86400
except:
return await ctx.send("Указана не правильная длительность мута!")
mute_expiration = (datetime.datetime.now() + datetime.timedelta(seconds=int(seconds))).strftime("%c")
role = self.mutedrole
mutes = load_json("C:/Users/murat/OneDrive/Рабочий стол/Ботинок ДС/jsons/mutes.json")
try:
member_mute = mutes[str(member.id)]
return await ctx.send("Данный пользователь уже замучен.")
except:
mutes[str(member.id)] = str(mute_expiration)
write_json("C:/Users/murat/OneDrive/Рабочий стол/Ботинок ДС/jsons/mutes.json", mutes)
await member.move_to(channel=None)
await member.add_roles(role, reason=reason)
await ctx.send(f"Администратор {ctx.author.mention} замутил участника {member.mention} на {mute_expiration}", delete_after=10)
await ctx.message.delete()

@commands.command(name="unmute", aliases=["размут"], brief="Снимает мут с выбранного участника.", usage="unmute <@user> ")
@commands.has_permissions(administrator=True)
async def unmute(self, ctx, member: disnake.Member, *, reason="None"):
await member.remove_roles(self.mutedrole, reason=reason)
await ctx.send(f"Администратор {ctx.author.mention} размутил участника {member.mention}", delete_after=10)
await ctx.message.delete()
mutes = load_json("C:/Users/murat/OneDrive/Рабочий стол/Ботинок ДС/jsons/mutes.json")
mutes.pop(str(member.id))
write_json("C:/Users/murat/OneDrive/Рабочий стол/Ботинок ДС/jsons/mutes.json", mutes)

@commands.Cog.listener()
async def on_ready(self):
self.guild = await self.bot.fetch_guild(1088413474675240983, 961992230514618429)
self.mutedrole = disnake.utils.get(self.guild.roles, id=[1088820236175802429, 1090188114946961438])
self.check_mutes.start()
print(f"Модуль {self.__class__.__name__} загружен...")

def setup(bot):
bot.add_cog(Tempmute(bot))
  • Вопрос задан
  • 83 просмотра
Решения вопроса 1
fenrir1121
@fenrir1121 Куратор тега discord.py
Начни с документации
С тем количеством костылей, которые я вижу странно если это работает.
А еще странно, что вы решили выложить везде вопрос, нигде не приложив код через специальный тег, ни тут ни в диснейк сообществе.

С переводом ошибки Вам уже помог гптбот выше, наверное стало понятно, что в fetch_guild передается только 1 id.
Правда fetch_guild вообще не нужен потому что все сервера на которые приглашен бот лежат в bot.guilds, выполняйте код для каждого из них циклом.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы