hasancan0000
Hectopat
- Katılım
- 3 Ocak 2020
- Mesajlar
- 24
GAMES[ctx.channel.id] = {
'last_char': random_char(),
'msg_count': 0,
'used_words': [],
'last_author': None,
}
#bu kodu farklı kanaldan aynı oyuna müdahale olmasın ve oyun her sunucuya özel olsun diye
#eklemiştim ve on_message eventinde;
if msg.channel.id in GAMES.keys():
if not msg.content.startswith(MPREFIX):
await oyun(msg)
#diyerek kontrol etmiştim ve oyunu asenkron olarak tek mesaj kanalına özel başlatmıştım
#Sorun buna benzer bir yöntem ile çözülebilir diye düşünüyorum
from ast import alias
import discord
from discord.ext import commands
import pprint
pp = pprint.PrettyPrinter(indent=4)
from youtube_dl import YoutubeDL
class music_cog(commands.Cog):
def __getitem__(self, key):
return getattr(self, key)
def __setitem__(self, key, value):
return setattr(self, key, value)
def __init__(self, bot):
self.bot = bot
self.YDL_OPTIONS = {'format': 'bestaudio', 'noplaylist':'True'}
self.FFMPEG_OPTIONS = {'before_options': '-reconnect 1 -reconnect_streamed 1 -reconnect_delay_max 5', 'options': '-vn'}
def search_yt(self, item):
with YoutubeDL(self.YDL_OPTIONS) as ydl:
try:
info = ydl.extract_info("ytsearch:%s" % item, download=False)['entries'][0]
except Exception:
return False
return {'source': info['formats'][0]['url'], 'title': info['title']}
def play_next(self, guildId):
if len(self[guildId]['music_queue']) > 0:
self[guildId]['is_playing'] = True
m_url = self[guildId]['music_queue'][0][0]['source']
self[guildId]['music_queue'].pop(0)
self[guildId]['vc'].play(discord.FFmpegPCMAudio(m_url, **self.FFMPEG_OPTIONS), after=lambda e: self.play_next(guildId))
else:
self[guildId]['is_playing'] = False
async def play_music(self, ctx):
guildId = str(ctx.message.guild.id)
if len(self[guildId]['music_queue']) > 0:
self[guildId]['is_playing'] = True
m_url = self[guildId]['music_queue'][0][0]['source']
if self[guildId]['vc'] == None or not self[guildId]['vc'].is_connected():
self[guildId]['vc'] = await self[guildId]['music_queue'][0][1].connect()
if self[guildId]['vc'] == None:
await ctx.send("Lütfen Ses Kanalına Bağlanın")
return
else:
await self[guildId]['vc'].move_to(self[guildId]['music_queue'][0][1])
self[guildId]['music_queue'].pop(0)
self[guildId]['vc'].play(discord.FFmpegPCMAudio(m_url, **self.FFMPEG_OPTIONS), after=lambda e: self.play_next(guildId))
else:
self[guildId]['is_playing'] = False
@commands.command(name="oynat", aliases=["o","playing"], help="Youtube'dan seçilen bir şarkıyı çalar")
async def play(self, ctx, *args):
query = " ".join(args)
guildId = str(ctx.message.guild.id)
if hasattr(self, guildId) == False:
self[guildId] = {
'music_queue': [],
'is_playing': False,
'is_paused': False,
'vc': None
}
voice_channel = ctx.message.author.voice.channel
if voice_channel is None:
await ctx.send("Lütfen Ses Kanalına Bağlanın!")
elif self[guildId]['is_paused'] == True:
self[guildId]['vc'].resume()
else:
song = self.search_yt(query)
if type(song) == type(True):
await ctx.send("Şarkı indirilemedi. Yanlış biçim başka bir anahtar sözcük deneyin. Bunun nedeni çalma listesi veya canlı yayın biçimi olabilir")
else:
await ctx.send("Sıraya şarkı eklendi")
self[guildId]['music_queue'].append([song, voice_channel])
if self[guildId]['is_playing'] == False:
await self.play_music(ctx)
@commands.command(name="durdur", help="Çalınan geçerli şarkıyı duraklatır")
async def pause(self, ctx, *args):
guildId = str(ctx.message.guild.id)
if self[guildId]['is_playing'] == True:
self[guildId]['is_playing'] = False
self[guildId]['is_paused'] = True
self[guildId]['vc'].pause()
elif self[guildId]['is_paused'] == True:
self[guildId]['vc'].resume()
@commands.command(name = "devam", help="Bot Şarkıyı Oynatmaya Devam Eder")
async def resume(self, ctx, *args):
guildId = str(ctx.message.guild.id)
if self[guildId]['is_paused'] == True:
self[guildId]['vc'].resume()
@commands.command(name="geç", aliases=["g"], help="Çalınan geçerli şarkıyı atlar")
async def skip(self, ctx):
guildId = str(ctx.message.guild.id)
if self[guildId]['vc'] != None and self[guildId]['vc'].is_playing():
self[guildId]['vc'].stop()
await self.play_music(ctx)
@commands.command(name="kuyruk", aliases=["k"], help="Sıradaki geçerli şarkıları görüntüler")
async def queue(self, ctx):
guildId = str(ctx.message.guild.id)
retval = ""
for i in range(0, len(self[guildId]['music_queue'])):
if (i > 4): break
retval += self[guildId]['music_queue'][i][0]['title'] + "\n"
if retval != "":
await ctx.send(retval)
else:
await ctx.send("Kuyrukta müzik yok")
@commands.command(name="ktemizle", aliases=["kt", "bin"], help="Müziği durdurur ve kuyruğu temizler")
async def clear(self, ctx):
guildId = str(ctx.message.guild.id)
if self[guildId]['vc'] != None and self[guildId]['is_playing'] == True:
self[guildId]['vc'].stop()
self[guildId]['music_queue'] = []
await ctx.send("Müzik kuyruğu temizlendi")
@commands.command(name="çık", aliases=["disconnect", "ç", "d"], help="Botu Ses Kanalından Atar")
async def dc(self, ctx):
guildId = str(ctx.message.guild.id)
self[guildId]['is_playing'] = False
self[guildId]['is_paused'] = False
await self[guildId]['vc'].disconnect()
Bu sitenin çalışmasını sağlamak için gerekli çerezleri ve deneyiminizi iyileştirmek için isteğe bağlı çerezleri kullanıyoruz.