import discord
from discord.ext import commands
bot = commands.Bot(command_prefix='!')
# Создаем словарь для хранения количества сообщений пользователя
message_count = {}
# Задаем лимит сообщений за определенный промежуток времени
SPAM_LIMIT = 5
SPAM_TIME = 10
@bot.event
async def on_message(message):
# Проверяем, что сообщение отправлено в текстовый канал
if isinstance(message.channel, discord.TextChannel):
# Проверяем, что отправитель не является ботом
if not message.author.bot:
# Проверяем, что отправитель не находится в списке администраторов
if message.author not in bot.get_guild(message.guild.id).get_role(ADMIN_ROLE_ID).members:
# Получаем количество сообщений пользователя за последний SPAM_TIME секунд
if message.author.id in message_count:
message_count[message.author.id] += 1
else:
message_count[message.author.id] = 1
# Если количество сообщений превышает SPAM_LIMIT, то удаляем сообщение и отправляем предупреждение
if message_count[message.author.id] > SPAM_LIMIT:
await message.delete()
await message.author.send(f'Вы были заблокированы на {SPAM_TIME} секунд за спам')
await message.author.add_roles(bot.get_guild(message.guild.id).get_role(MUTED_ROLE_ID))
await asyncio.sleep(SPAM_TIME)
await message.author.remove_roles(bot.get_guild(message.guild.id).get_role(MUTED_ROLE_ID))
message_count[message.author.id] = 0
await bot.process_commands(message)
@bot.event
async def on_message(msg):
for webhook in await msg.channel.webhooks():
if webhook.user == bot.user:
if msg.content.startswith(webhook.name):
url = None
try:
url = Memory.read(f"avatars/{msg.channel.id}{webhook.name}webhook.txt")
except disnake.errors.HTTPException:
await webhook.send(content="Слишком много запросов отправлено! Пожалуйста подождите...")
except:
await webhook.send(content = msg.content[len(webhook.name) + 1:])
await msg.delete()
else:
await webhook.send(content = msg.content[len(webhook.name) + 1:], avatar_url=url)
await msg.delete()
@bot.command()
async def feedback(ctx, message:str, user_id:int=None):
if user_id is None:
author = bot.get_user(your_id)
await author.send(f"Вам отправили сообщение: {message}\nАвтор: {ctx.author} | {ctx.author.id}")
else:
user = bot.get_user(user_id)
await user.send(f"Вам отправили сообщение: {message}")
import discord
import json
import asyncio
from discord.ext import commands
@client.event
async def on_ready():
with open("test.json", 'r') as f:
data = json.load(f)
for i in range(len(data)):
member = await (await client.fetch_guild(data[i]["guild_id"])).fetch_member(data[i]["id"])
client.loop.create_task(pun_start(member))
print("ready")
def check_user_db(user_id:int):
with open('test.json', 'r') as f:
data = json.load(f)
for i in range(len(data)):
if data[i]["id"] == user_id: return True
return False
def add_user_db(user_id:int, guild_id:int, author:str, timeout:int, reason:str, roles:list, role_pun:int):
if check_user_db(user_id) is True: return False
else:
with open('test.json', 'r') as f:
data = json.load(f)
new_user = {
"id": user_id,
"guild_id": guild_id,
"author": f"{author.name}#{author.discriminator}",
"timeout": timeout,
"reason": reason,
"roles": roles,
"role_pun": role_pun
}
data.append(new_user)
with open('test.json', 'w') as f:
json.dump(data, f, indent=3)
return True
def remove_user_db(user_id:int):
if check_user_db(user_id) is False: return False
else:
with open('test.json', 'r') as f:
data = json.load(f)
for i in range(len(data)):
if data[i]["id"] == user_id:
del data[i]
with open('test.json', 'w') as f:
json.dump(data, f)
return True
return False
async def pun_start(user):
with open('test.json', 'r') as f:
data = json.load(f)
user_data = {}
for i in range(len(data)):
if data[i]["id"] == user.id: user_data = data[i]; break
role_pun = discord.utils.get(user.guild.roles, id=id_роли) # роль для наказания
old_roles = user_data["roles"] # старые роли участника
await asyncio.sleep(user_data["timeout"])
await user.remove_roles(role_pun)
for role in old_roles:
role_user = discord.utils.get(user.guild.roles, id=role)
await user.add_roles(role_user)
remove_user_db(user.id)
@client.command()
async def pun(ctx, member:discord.Member=None, timeout:int=None, reason:str="Не указано"):
if member is None or timeout is None:
await ctx.reply("Укажите участника и время.\nПример: !pun @участник 100 - наказываем участника на 100сек.\n**Важно:** Время указывается в секундах!")
elif check_user_db(member.id) is True:
await ctx.reply("Участника уже наказан!")
else:
role_pun = discord.utils.get(ctx.guild.roles, id=id_роли) # роль для наказания
old_roles = [] # старые роли участника
for role in member.roles:
if role.name != "@everyone":
old_roles.append(role.id)
await member.remove_roles(role)
await member.add_roles(role_pun)
add_user_db(member.id, ctx.guild.id, ctx.author, timeout, reason, list(old_roles), role_pun.id) # добавляем участника в файл
await ctx.send(f"{member.mention}, наказан!\nПричина: {reason}")
await asyncio.sleep(timeout)
await member.remove_roles(role_pun)
for role in old_roles:
role_user = discord.utils.get(ctx.guild.roles, id=role)
await member.add_roles(role_user)
remove_user_db(member.id)
await ctx.send(f"Наказания с {member.mention} снято!\nПричина: Автоматическое снятие")
@client.event
async def on_message(message):
def check(m):
return m.author == ctx.author and m.channel == ctx.channel # Принимаем данные только пользователя который написал 'Func'
if message.author == client.user:
return
if message.channel.startswith("Func")
await message.channel.send("Введите имя")
data1 = await client.wait_for('message', check=check, timeout=60) # timeout=60 - в течении 60 сек. мы будем принимать сообщения
await message.channel.send("Введите пароль") # ВАЖНО: Мы принимаем ОДНО сообщение.
data2 = await client.wait_for('message', check=check, timeout=60)
# или бесконечно принимать данные
await message.channel.send("Введите данные")
while True:
data = await client.wait_for('message', check=check) # Так мы будем бесконечно принимать сообщения.
emb = discord.Embed(title='Ивенты', description=f'Выберите ивент который хотите провести.',
components=[
Button(style=ButtonStyle.gray, label='CodeNames', emoji=''),
Button(style=ButtonStyle.gray, label='Бункер', emoji=''),
Button(style=ButtonStyle.gray, label='Дурак Онлайн', emoji=''),
Button(style=ButtonStyle.gray, label='Шляпа', emoji=''),
Button(style=ButtonStyle.gray, label='Сломанный телефон', emoji='')
])
emb.set_thumbnail(url=ctx.author.avatar_url)
msg = await ctx.send(embed = emb)
@client.command( pass_context = True )
async def help( ctx ):
ebm = discord.Embed( title = 'Все наши команды' )
emb.add_field( name = f'{ PREFIX }help', value = 'Помощь по командам' )
emb.add_field( name = f'{ PREFIX }helpme', value = 'Помощь по командам в личку' )
emb.add_field( name = f'{ PREFIX }clear', value = 'очистка чата (только для админов)' )
emb.add_field( name = f'{ PREFIX }kick', value = 'кикнуть юзера (только для админов)' )
emb.add_field( name = f'{ PREFIX }ban', value = 'забанить юзера (только для админов)' )
await ctx.send( embed = emb )
@client.command()
@commands.has_permissions(view_audit_log = True) #права команды: Просматривать аудит логи
async def say(ctx, *, arg = None):
emb = discord.Embed(description = f'{arg}', color = 0x0944d9) #цвет синий
await ctx.send(embed = emb) #отправка сообщения
@say.error #если у участника нету прав просматривать аудит лог то пишем ему то что у вас не достаточно прав!
async def say_error(ctx, error):
if isinstance(error, commands.MissingPermissions):
emb = discord.Embed(titile = f'Ошибка', description = f'**У вас недостаточно прав!**', color = RED)
emb.set_footer(text = f'{client.user.name} © 2020 | Все права защищены', icon_url = client.user.avatar_url)
await ctx.send(embed = emb, delete_after = 15)