class Verify(disnake.ui.View):
def __init__(self):
super().__init__(timeout=180)
self.db = database.DataBase()
@disnake.ui.button(label="",style=disnake.ButtonStyle.gray, emoji="", disabled=False)
async def my_button(self, button: disnake.ui.Button, interaction: disnake.Interaction):
role = disnake.utils.get(bot.guilds[0].roles, id=1234567890) # Получаем роль.
await interaction.author.add_roles(role) # Выдаем роль.
await interaction.response.send_message("Done", ephemeral=True)
async def no_respond(inter: disnake.Interaction) -> None:
try:
await inter.response.send_message('', ephemeral=True)
except Exception:
pass
communication_disabled_until
bot.session = aiohttp.ClientSession()
@bot.command()
async def habr(ctx: commands.Context, member: discord.Member, time: int):
# Авторизация бота.
headers = {"Authorization": f"Bot {bot.http.token}"}
url = f"https://discord.com/api/v9/guilds/{ctx.guild.id}/members/{member.id}"
# Расчет времени "отправки на покушать.". Получаем время именно по utcnow.
# В противном случае, рискуем отправить человека кушать до конца времен. Ну почти.
timeout = (datetime.datetime.utcnow() + datetime.timedelta(minutes=time)).isoformat()
json = {'communication_disabled_until': timeout}
# Отправка запроса.
async with bot.session.patch(url, json=json, headers=headers) as session:
if session.status == 200:
await ctx.send(f'Пользователь {member.mention} пошел кушать на {time} минут.')
await ctx.send(f'Воу-воу! Этого пользователя нельзя отправить кушать')
ctx
, не имеет атрибута member
ctx
должен быть передан первым.@bot.command()
async def test(ctx, member: discord.Member):
await ctx.send(f'{ctx.author.name} грустит вместе с {member.name}')
@bot.event
async def on_message(message):
if message.author != bot.user: # Если автор сообщения НЕ бот.
if {i.lower().translate(str.maketrans('', '', string.punctuation)) for i in message.content.split(' ')} \
.intersection(set(json.load(open('slyhi.json')))) != set():
channel = bot.get_channel(894897187593551892)
await channel.send(f'[Выхваченное Сообщение]:~/// {message.author.mention}: {message.content}')
await bot.process_commands(message)
channels = [1231234234, 1231231234]
if message.channel.id in channels:
do_something()
@bot.command()
async def test(ctx):
emb = discord.Embed(title="Image", colour=discord.Color.purple()) # Инициализируем Embed, который будет изменен.
emb.set_image(url='https://i.imgur.com/mtKT52F.jpeg') # Прикрепляем к Embed'у изображение из интернетов.
res = await ctx.send(embed=emb)
new_emb = res.embeds[0] # Получаем наш Embed из первого сообщения.
file = discord.File('ImageInPc.png', filename="ImageToDiscord.png")
img_msg = await ctx.send(file=file) # Отправляем картинку в канал, чтобы после этого получить на нее ссылку.
await asyncio.sleep(5) # Спим для наглядности.
new_emb.set_image(url=img_msg.attachments[0].url) # img_msg.attachments[0].url - Искомая ссылка на файл.
await res.edit(embed=new_emb) # Отправляем наш измененный Embed.
from_dict()
emb_json = json.load(embed_file)
emb = discord.Embed.from_dict(emb_json)
await ctx.send(embed=emb)
@bot.command()
async def habr(ctx, arg=None):
await ctx.message.delete() # Удаляем наше сообщение.
emb = discord.Embed(title="Хабр", colour=discord.Color.orange()) # Инициализируем эмбед.
emb.add_field(name='Первое поле', value=f'Реально же первое!') # Добавляем поле.
msg = await ctx.send(embed=emb) # Отправляем сообщение и запоминаем что оно такое красивое есть.
await asyncio.sleep(2)
emb = msg.embeds[0] # Выдергиваем с нашего отправленного сообщения эмбед и пересобираем его так, как нужно нам.
for i, item in enumerate(emb.fields): # Перебираем поля в эмбеде. i - индекс(позиция); item - содержание.
if arg: # Если есть аргумент, то добавляем его в наше новое поле.
emb.add_field(name='Второе поле', value=f'{arg}')
else: # Если аргумента нету, то редактируем наше первое поле.
if "Первое поле" in item.name:
emb.set_field_at(index=i, name=item.name, value='Без аргумента? Жаль.', inline=item.inline)
await msg.edit(embed=emb) # Отправляем отредактированное сообщение.
@bot.event
async def on_message(message):
if int(message.channel.id) == 1234567890: # ID-канала в котором будут сообщения для отправки.
content = message.content # Получаем содержание сообщения.
await message.delete() # Удаляем отправленное сообщение.
channel = bot.get_channel(1234567890) # ID-канала куда будут отправлены сообщения.
await channel.send(content) # Отправка сообщения с содержанием в нужный нам канал.
@bot.command(pass_context = True)
@commands.has_permissions(administrator = True)
async def checkuser_user(ctx, arg):
await ctx.channel.send('Please, wait')
# Пребираем все пользователей на сервере.
for guild in bot.guilds:
for member in guild.members:
# Сравниваем введенный ник и ники тех кто есть на сервере, убирая идентификатор из ника "#9999"
if arg == str(member)[0:-5]:
PREFIX = '>'
emb = discord.Embed(title = 'User info')
emb.add_field(name = '{}Bans'.format(PREFIX),value = '0')
emb.add_field(name = '{}Kicks'.format(PREFIX),value = '0')
emb.add_field(name = '{}Warns'.format(PREFIX),value = '1/3')
emb.add_field(name = '{}Ban reason: '.format(PREFIX),value = 'None')
emb.add_field(name = '{}Role history'.format(PREFIX),value = 'Verify.')
await ctx.send(embed = emb)
from fuzzywuzzy import fuzz
@bot.command(pass_context = True)
@commands.has_permissions(administrator = True)
async def checkuser_user(ctx, arg):
await ctx.channel.send('Please, wait')
# Пребираем все пользователей на сервере.
for guild in bot.guilds:
for member in guild.members:
# Сравниваем введенный ник и ники полученные из списка.
if fuzz.partial_ratio(arg, str(member)[0:-5]) > 95: # <- Процент при котором совпадение "успешно".
PREFIX = '>'
emb = discord.Embed(title = 'User info')
emb.add_field(name = '{}Bans'.format(PREFIX),value = '0')
emb.add_field(name = '{}Kicks'.format(PREFIX),value = '0')
emb.add_field(name = '{}Warns'.format(PREFIX),value = '1/3')
emb.add_field(name = '{}Ban reason: '.format(PREFIX),value = 'None')
emb.add_field(name = '{}Role history'.format(PREFIX),value = 'Verify.')
await ctx.send(embed = emb)
bot.get_channel(id_here)
for channel in ctx.guild.channels:
if channel.name == "report":
#Объект канала, который мы будем использовать для отправки сообщения.
channel = bot.get_channel(channel.id)
@bot.command(pass_context=True)
async def report(ctx, *, arg):
emb = discord.Embed(title="REPORT", description=f"От пользователя {ctx.author.mention}", colour=discord.Color.red())
emb.add_field(name="Причина:", value=arg, inline=True)
# Получаем все каналы в нашей гильдии.
for channel in ctx.guild.channels:
if channel.name == "report":
# Объект канала, который мы будем использовать для отправки сообщения.
channel = bot.get_channel(channel.id)
# Отправляем сообщение в нужный нам канал.
await channel.send(embed=emb)
@bot.command()
async def forward(ctx, name_channel=None):
# Получаем id канала по его названию.
for channel in ctx.guild.channels:
if channel.name == name_channel:
channel = bot.get_channel(channel.id)
# Получаем все содержание сообщения и отсылаем его в нужный нам канал.
content = ctx.message.content
await channel.send(content)
@Bot.command(pass_context=True)
@commands.has_permissions(administrator=True)
async def kick(ctx, member: discord.Member, *, reason):
channel = Bot.get_channel(789968921432031272)
#Отправляем сообщение пользователю, до кика с сервера
emb = discord.Embed(title="Вы были кикнуты с нашего замечательного сервера.", description="Приходите еще и получите экстра порцию банов!", colour=discord.Color.blue())
emb.add_field(name='Кикнул вас негодяй:', value=ctx.message.author)
await member.send(embed = emb)
#Теперь можно кикать.
await member.kick( reason = reason)
await ctx.channel.purge(limit=0)
emb = discord.Embed(color=344462)
emb.add_field(name='✅ Kick пользователя', value='Пользователь {} был кикнут!'.format(member.mention))
await channel.send(embed = emb)