import discord
from discord.ext import commands
import youtube_dl
import asyncio
import random
intents = discord.Intents.all()
intents.members = True
intents.messages = True
bot = commands.Bot(command_prefix='%', intents=intents)
bot.remove_command('help')
ytdlopts = {
'format': 'bestaudio/best',
'outtmpl': 'downloads/%(extractor)s-%(id)s-%(title)s.%(ext)s',
'restrictfilenames': True,
'noplaylist': True,
'nocheckcertificate': True,
'ignoreerrors': False,
'logtostderr': False,
'quiet': True,
'no_warnings': True,
'default_search': 'auto',
'source_address': '0.0.0.0',
'force-ipv4': True,
'preferredcodec': 'mp3',
'cachedir': False,
'extractor': 'youtube',
}
ffmpeg_options = {
'options': '-vn'
}
ytdl = youtube_dl.YoutubeDL(ytdlopts)
@bot.event
async def on_ready():
statuses = ['Ну а что поделать?', 'Да да я...', '/help', 'Че смотришь?']
while True:
await bot.change_presence(status=discord.Status.dnd)
await bot.change_presence(activity=discord.Activity(type=discord.ActivityType.watching, name=random.choice(statuses)))
await asyncio.sleep(10)
@bot.command(description='Тестовая команда')
async def command(ctx):
"""
Тестовая команда
"""
await ctx.message.delete()
await ctx.send('Я робот')
blocked_words = ['пидор', 'пидорасина', 'негр', 'негритосик', 'хохол', 'русня'] # Список запрещенных слов
@bot.event
async def on_message(message):
for word in blocked_words:
if word in message.content.lower():
await message.delete() # Удаление сообщения-нарушителя
await message.channel.send(f'{message.author.mention}, не пиши такие плохие слова. :smiling_face_with_tear:') # Отправка сообщения с упоминанием нарушителя
break
await bot.process_commands(message) # Обработка других команд
@bot.command()
async def furry(ctx,description='Узнай насколько ты фурри'):
"""
Показывает на сколько ты фурри.
Использование: /furry
"""
percentage = random.randint(0, 100) # Генерация случайного числа от 0 до 100
if percentage < 30:
await ctx.send(f"Ты фурри на {percentage}%, так держать!")
else:
await ctx.send(f"Ты фурри на {percentage}%, фу мерзость!")
@bot.command()
async def help(ctx, description='Список всех комманд'):
"""Все команды бота.
Использование: /help
"""
embed = discord.Embed(title="Всевозможные команды", description="Список доступных команд бота:", color=discord.Color.blue())
for command in bot.commands:
embed.add_field(name=command.name, value=command.help, inline=False)
await ctx.send(embed=embed)
@bot.command()
async def users(ctx, description='Кол-во участников сервера'):
"""
Показывает кол-во людей и ботов на этом дискорд сервере.
Использование: /users
"""
member_count = len(ctx.guild.members)
await ctx.send(f"На этом сервере сейчас {member_count} участника(ов).")
@bot.event #рандомные реакции
async def on_message(message):
if random.random() < 0.1:
emoji = random.choice(bot.emojis)
try:
await message.add_reaction(emoji)
except discord.errors.HTTPException:
pass
await bot.process_commands(message)
@bot.command()
@commands.has_permissions(manage_messages=True)
async def clear(ctx, amount: int, description='Удаление сообщений'):
"""
Удаляет указанное количество сообщений из текущего канала чата.
Использование: /clear [количество]
"""
await ctx.channel.purge(limit=amount+1)
await ctx.send(f'Удалено {amount} сообщений.')
@bot.command()
async def play(ctx, *, query):
"""
Включение музыки в голосом канале.
Использование: /play [название]
"""
try:
voice_channel = ctx.author.voice.channel
except AttributeError:
return await ctx.send("Нет канала для подключения. Убедитесь, что вы находитесь в голосовом канале.")
permissions = voice_channel.permissions_for(ctx.me)
if not permissions.connect or not permissions.speak:
await ctx.send("У меня нет разрешения подключаться или говорить в этом голосовом канале.")
return
voice_client = ctx.guild.voice_client
if not voice_client:
await voice_channel.connect()
voice_client = discord.utils.get(bot.voice_clients, guild=ctx.guild)
loop = asyncio.get_event_loop()
data = await loop.run_in_executor(None, lambda: ytdl.extract_info(url=query, download=False, extra_info={'verbose': True}))
title = data.get('title', 'Неизвестное название')
if 'entries' in data:
data = data['entries'][0]
song = data.get('url', 'Неизвестный URL')
else:
song = data.get('url', 'Неизвестный URL')
try:
voice_client.play(discord.FFmpegPCMAudio(source=song, **ffmpeg_options, executable="ffmpeg"), after=lambda e: print('done', e))
except Exception as e:
print(e)
await ctx.send(f'**Сейчас играет:** {title}')
@bot.command()
async def skip(ctx):
voice_client = ctx.guild.voice_client
if voice_client:
voice_client.stop()
await ctx.send("Песня пропущена.")
else:
await ctx.send("Я не нахожусь в голосовом канале.")
@bot.command()
async def pause(ctx):
voice_client = ctx.guild.voice_client
if voice_client.is_playing():
voice_client.pause()
await ctx.send("Песня поставлена на паузу.")
else:
await ctx.send("На данный момент ничего не играет.")
@bot.command()
async def resume(ctx):
voice_client = ctx.guild.voice_client
if voice_client.is_paused():
voice_client.resume()
await ctx.send("Продолжаю воспроизведение песни.")
else:
await ctx.send("Песня уже играет или не поставлена на паузу.")
@bot.command()
async def stop(ctx):
voice_client = ctx.guild.voice_client
if voice_client:
await voice_client.disconnect()
await ctx.send("Отключаюсь от голосового канала.")
else:
await ctx.send("Я не нахожусь в голосовом канале.")
@bot.command(name="ban",usage="ban <@user> <reason=None>")
@commands.has_permissions(ban_members=True)
async def ban(ctx, member: discord.Member, *, reason=None):
"""
Забанить пользователя на сервере.
Использование: /ban <@user> <reason=None>
"""
await member.send(f"You was banned on server") # Отправить личное сообщение пользователю
await ctx.send(f"Member {member.mention} was banned on this server")
await member.ban(reason=reason)
@bot.command(name="unban", usage="unban <user_id>")
@commands.has_permissions(ban_members=True)
async def unban(ctx, user_id: int):
"""
Разбанить пользователя на сервере.
Использование: /unban <user_id>
"""
user = await bot.fetch_user(user_id)
await ctx.guild.unban(user)
bot.run('MTA3ODU4ODI5NjkxOTI1MzA4Mw.GIPwYX.bTTc7dohvj7Pd9R9bEd6-tgXiZea56ixKWlsOw')
字符串
输出量:
PS C:\Users\comp\Desktop\137077897> py music.py
2023-11-16 15:41:58 INFO discord.client logging in using static token
2023-11-16 15:42:00 INFO discord.gateway Shard ID None has connected to Gateway (Session ID: 0520516b54d46113b8d93267ed392825).
2023-11-16 15:42:03 INFO discord.voice_client Connecting to voice...
2023-11-16 15:42:03 INFO discord.voice_client Starting voice handshake... (connection attempt 1)
2023-11-16 15:42:03 INFO discord.voice_client Voice handshake complete. Endpoint found stockholm9000.discord.media
done None
2023-11-16 15:42:35 INFO discord.player ffmpeg process 10132 successfully terminated with return code of 0.
型
1条答案
按热度按时间fumotvh31#
首先,我建议使用
yt_dlp
而不是youtube_dl
,因为它已经停产了,所以你需要做pip install yt_dlp
。另外,你有2个on_message()
函数,所以我也修复了它。而不是打电话
字符串
你可以只做
ytdl.extract_info(url=query, download=False, extra_info={'verbose': True})
下面是代码的最终修复版本:
型