Задать вопрос
  • Как сделать боту комманду включения музыки по ссылки с ютуба на голосовом канале?

    h0w4rd
    @h0w4rd
    Python dev.
    Я даже не стал вникать в суть, просто посмотрел на код 30 секунд. Рекомендую почитать комментарии и последовать советам. И пожелаю удачи.
    import discord
    from discord.ext import commands
    # У меня зрение -3,5, но использования этого я не увидел.
    from pytube import YouTube
    
    bot = commands.Bot(command_prefix="!")
    # Все что, не закрыто иксами - можно узнать. А, что закрыто - секретно и ДОЛЖНО быть скрыто. А лучше вообще токен не показывать)
    TOKEN = "Njc1MzUwNTkzOTIwODI3Mzk0.xxxxx.xxxxx-xxxxx"
    yt_url = 'https://www.youtube.com/results?'
    game = discord.Game("Krunker.io")
    
    @bot.event # загрузка
    async def on_ready():
        print("Bot was launched!")
        await bot.change_presence(activity=game)
    
    @bot.command(pass_context=True)
    async def music(ctx, channel):
        url = ctx.message.content # вернет что-то вроде "!music youtube.com/watch"
        url = url.strip('https://www.youtube.com/watch?v=naIKplXzxTY') # почитайте что делает strip()
    
        vc = await bot.connect() # "бот, подключись!", а куда не сказано.
        vc.play(discord.FFmpegPCMAudio(url)) # ссылка на HTML страницу... а нужно АУДИО поток, а не станица. библиотека не может догадаться, что от нее хотят.
        vc.is_playing() # почитайте про "if"
        vc.pause() # зачем останавливать поток
        vc.resume() # и включать ._.
        vc.stop() # а после останавливать
    
    bot.run(TOKEN)
    Ответ написан
    Комментировать
  • 'Bot' object has no attribute 'commit',как пофиксить это?

    Не видел в ботах такой функции. Но я такую видел в курсоре для БД вы наверное путаете вы наверное должны
    import discord
    import asyncio
    import aiosqlite
    import random
    from discord.ext import commands
    from discord_components import Button,Select,SelectOption,ComponentsBot
    
    import config
    
    #set prefix
    client = commands.Bot(command_prefix = "$")
    client.remove_command('help')
    
    #ready check
    @client.event
    async def on_ready():
      print('Bot logged in as {0.user}'.format(client))
      setattr(client, 'db', await aiosqlite.connect('level.db'))
      await asyncio.sleep(3)
      async with client.db.cursor() as cursor:
        await cursor.execute('CREATE TABLE IF NOT EXISTS levels (level INTEGER, xp INTEGER, user INTEGER, guild INTEGER)')
    
    
    @client.event
    async def on_message(message):
      if message.author.bot:
        return
      await client.process_commands(message)
      author = message.author
      guild = message.guild
      async with client.db.cursor() as cursor:
        await cursor.execute("SELECT xp FROM  levels WHERE user = ? AND guild = ?", (author.id, guild.id,))
        xp = await cursor.fetchone()
        await cursor.execute("SELECT xp FROM  levels WHERE user = ? AND guild = ?", (author.id, guild.id,))
        level = await cursor.fetchone()
    
        if not xp or not level:
          await cursor.execute("INSERT INTO levels (level, xp, user, guild) VALUES (?, ?, ?, ?)", (0, 0, author.id, guild.id,))
          await client.db.commit()
    
        try:
          xp =xp[0]
          level = level[0]
        except TypeError:
          xp = 0
          level = 0
    
        if level <5:
          xp += random.randint(1, 3)
          await cursor.execute("UPDATE levels SET xp = ? WHERE user = ? AND guild = ?", (xp, author.id, guild.id,))
        else:
          rand = random.randint(1, (level//4))
          if rand == 1:
            xp += random.randint(1, 3)
            await cursor.execute("UPDATE levels SET xp = ? WHERE user = ? AND guild = ?", (xp, author.id, guild.id,))
        if xp >= 100:
          level += 1
          await cursor.execute("UPDATE levels SET level = ? WHERE user = ? and guild = ?", (level, author.id, guild.id,))
          await cursor.execute("UPDATE levels SET xp = ? WHERE user = ? AND guild = ?", (0, author.id, guild.id,))
          await message.channel.send(f'{author.mention} has leveled up to level **{level}**!')
      await client.db.commit()
    
    @client.command(aliases = ['lvl', 'rank', 'r'])
    async def level(ctx, member: discord.Member = None):
      member = ctx.author
      async with client.db.cursor() as cursor:
        await cursor.execute("SELECT xp FROM  levels WHERE user = ? AND guild = ?", (member.id, ctx.guild.id,))
        xp = await cursor.fetchone()
        await cursor.execute("SELECT xp FROM  levels WHERE user = ? AND guild = ?", (member.id, ctx.guild.id,))
        level = await cursor.fetchone()
    
        if not xp or not level:
          await cursor.execute("INSERT INTO levels (level, xp, user, guild) VALUES (?, ?, ?, ?)", (0, 0, ctx.author.id, ctx.guild.id,))
          await client.db.commit()
    
        try:
          xp = xp[0]
          level = level[0]
        except TypeError:
          xp = 0
          level = 0
    
        em = discord.Embed(title = f"{member.name}'s level", description = f"level: {level}\nXP: {xp}")
        em.set_thumbnail(url = member.avatar_url)
        await ctx.send(embed = em)
    #help command
    @client.command()
    async def help(ctx):
      page1 = discord.Embed(title = 'Start Page.', 
        description = 
        'Bot prefix = `' + str(config.PREFIX) + '`\n'+ 
        'This is a start page, please select a category for more information!',
        color = discord.Color.green())
      page1.set_thumbnail(url = ctx.guild.icon_url)
    
      page2 = discord.Embed(title = 'Moderation Settings.', 
        description = 
        '**clear** `amount` - clears the chat to amount.\n' +
        '**mute** `user,time,reason` - disables access to all channels.\n' +
        '**unmute** `user` - enables access to all channels.\n' +
        '**kick** `user,reason` - kick a member from the server.\n' +
        '**ban** `user,reason` - ban a member from the server.\n' +
        '**unban** `user` - unban a member from the server.', 
        color = discord.Color.green())
      page2.set_thumbnail(url = ctx.guild.icon_url)
    
      emoji1 = client.get_emoji(973967340003815444)
      message = await ctx.send(components = [
        Select(
          placeholder = 'Select a category!',
          options = [
            SelectOption(
            	label = 'Moderation Settings',
            	emoji = emoji1,
            	description = 'Setting up server moderation.',
            	value = '1'
            )
          ],
          custom_id = 'HelpSelect'
        )
      ], embed = page1)
    
      while True:
        interaction = await client.wait_for('select_option', check = lambda inter: inter.custom_id == 'HelpSelect' and inter.user == ctx.author)
        value = interaction.values[0]
        if value == '1':
          await message.edit(embed = page2)
        else:
          print('Error')
    
    #clear command
    @client.command()
    @commands.has_permissions(administrator = True)
    async def clear(ctx, amount = 0):
      await ctx.channel.purge(limit  = amount + 1)
    
    #kick command
    @client.command()
    @commands.has_permissions(kick_members = True)
    async def kick(ctx, member:discord.Member, *, reason = None):
        if reason == None:
          reason = "None"
        await ctx.guild.kick(member)
        await ctx.send(f'{member.mention} has been kicked for {reason}.')
    
    #mute command
    @client.command()
    @commands.has_permissions(manage_messages = True)
    async def mute(ctx, member:discord.Member, time:str, *, reason = None):
      end_time = time[-1:]
      mutetime = int(time[:-1])
    
      muteembedserver = discord.Embed(title = 'Mute information.', color = discord.Color.red())
      muteembedserver.add_field(name = 'Moderator', value = ctx.author.mention, inline = True)
      muteembedserver.add_field(name = 'Muted user', value = member.mention, inline = True)
      muteembedserver.add_field(name = '⠀', value = '⠀', inline = True)
      muteembedserver.add_field(name = 'Reason', value = reason, inline = True)
      muteembedserver.add_field(name = 'Muted Time', value = time, inline = True)
      muteembedserver.add_field(name = '⠀', value = '⠀', inline = True)
    
      muteembedmember = discord.Embed(title = 'Mute information.', description = 'You were muted in the server ' + str(ctx.guild.name) + str('!'), color = discord.Color.red())
      muteembedmember.add_field(name = 'Moderator', value = ctx.author.mention, inline = True)
      muteembedmember.add_field(name = 'Reason', value = reason, inline = True)
      muteembedmember.add_field(name = 'Time', value = time, inline = True)
    
      guild = ctx.guild
      mutedRole = discord.utils.get(guild.roles, name = 'Muted')
    
      if not mutedRole:
        mutedRole = await guild.create_role(name = 'Muted')
        for channel in guild.channels:
          await channel.set_permissions(mutedRole, speak = False, send_messages = False, read_message_history = True, read_messages = False)
      if mutetime <= 0:
        await ctx.send(f'Time must not be less than or equal to zero!')
      else:
        if end_time == 's':
          await member.add_roles(mutedRole, reason = reason)
          await ctx.send(embed = muteembedserver)
          await member.send(embed = muteembedmember)
          await asyncio.sleep(mutetime)
          await member.remove_roles(mutedRole)
        elif end_time == 'm':
          await member.add_roles(mutedRole, reason = reason)
          await ctx.send(embed = muteembedserver)
          await member.send(embed = muteembedmember)
          await asyncio.sleep(mutetime * 60)
          await member.remove_roles(mutedRole)
        elif end_time == 'h':
          await member.add_roles(mutedRole, reason = reason)
          await ctx.send(embed = muteembedserver)
          await member.send(embed = muteembedmember)
          await asyncio.sleep(mutetime * 60 * 60)
          await member.remove_roles(mutedRole)
        elif end_time == 'd':
          await member.add_roles(mutedRole, reason = reason)
          await ctx.send(embed = muteembedserver)
          await member.send(embed = muteembedmember)
          await asyncio.sleep(mutetime * 60 * 60 * 24)
          await member.remove_roles(mutedRole)
        else:
          await ctx.send(f'**You entered the wrong time!(Example: 10s,10m,10h,10d)**')
    
    #unmate command
    @client.command()
    @commands.has_permissions(manage_messages = True)
    async def unmute(ctx, member:discord.Member):
      guild = ctx.guild
      mutedRole = discord.utils.get(guild.roles, name = 'Muted')
      await member.remove_roles(mutedRole)
      await ctx.send(f"{member.mention} Successfully unmuted by {ctx.author.mention}.")
      await member.send(f'You were unmuted in the server {guild.name}.')
    
    #ban command
    @client.command()
    @commands.has_permissions(ban_members = True)
    async def ban(ctx, member:discord.Member, *, reason = None):
      guild = ctx.guild
      if reason == None:
        reason = f'None'
      else:
        reason = reason
      if ctx.author.top_role < member.top_role:
        await ctx.send(f"You can't ban members with a higher role than you!")
      elif ctx.author.top_role > member.top_role:
        await ctx.guild.ban(member, reason = reason)
        await ctx.send(f'{member.mention} Successfully banned by {ctx.author.mention} for reason {reason}.')
      elif ctx.author.guild_permissions.administrator:
        await ctx.guild.ban(member, reason = reason)
        await ctx.send(f'{member.mention} Successfully banned by {ctx.author.mention} for reason {reason}.')
      else:
        await ctx.send(f'Error')
    #unban command
    @client.command()
    @commands.has_permissions(ban_members = True)
    async def unban(ctx, *, member):
      bannedUsers = await ctx.guild.bans()
      member = await commands.converter.UserConverter().convert(ctx, member)
      for ban_entry in bannedUsers:
        user = ban_entry.user
        if user.id == member.id:
          await ctx.guild.unban(user)
          await ctx.send(f'{user.mention} Successfully unbanned by {ctx.author.mention}.')
        elif user.id != member.id:
          await ctx.send('User not banned!')
        else:
          await ctx.send(f'Error')
    #Connect
    client.run(config.TOKEN)

    Надеюсь мой ответ помог.
    P.S вы забыли client.process_commands(message)
    Ответ написан
    Комментировать
  • Как правильно составить POST запрос?

    Alixx
    @Alixx
    $curl = curl_init();
    
    $data = array(
        "amount" => "15",
        "currency" => "USD",
        "order_id" => "1",
        "url_return" => "https://your.site/return",
        "url_callback" => "https://your.site/callback"
    );
    
    $headers = array(
        "merchant: 8b03432e-385b-4670-8d06-064591096795",
        "sign: fe99035f86fa436181717b302b95bacff1",
        "Content-Type: application/json"
    );
    
    $options = array(
        CURLOPT_URL => "https://api.cryptomus.com/v1/payment",
        CURLOPT_POST => true,
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_POSTFIELDS => json_encode($data),
        CURLOPT_HTTPHEADER => $headers
    );
    
    curl_setopt_array($curl, $options);
    $response = curl_exec($curl);
    curl_close($curl);
    Ответ написан
    Комментировать
  • Как правильно составить условие в шаблонизаторе smarty?

    @kafeuri1
    {if isset($smarty.session.id)}
    Вы успешно авторизовались!
    {else}
    {$auth}
    {/if}
    Ответ написан
    1 комментарий
  • Почему нельзя давать одинаковое название id?

    HiNeX
    @HiNeX
    Web Developer
    Это не одинаковые id. Вот одинаковые:
    <div id="div1"></div>
    <div id="div1"></div>
    <div id="div1"></div>


    Весь смысл ID как раз в том что к элементу можно обращаться именно по уникальному идентификатору.
    Ответ написан
    9 комментариев
  • Есть ли смысл при подаче резюме?

    @ADDtvb
    Middle Frontend Developer(React Lover)
    Я советую хотя бы 2 - 3 раза в год обновлять резюме, а также я сам всегда стараюсь писать сопроводитлеьные письма. В которых рассказываю про опыт который им нужен, ибо в резюме написана общая информация, а допустим они ищут Frontend Developer'a который умеет весртать и анимировать "супер модные ммакеты" и в письме я расскзываю о том что я делал что то подопбное и тд, но при условии если я реально делал это) Врать в резюме и письмах не стоит так как правзда все равно быстро выплевет на тех. собесе или уже на работе.

    А звонить я думаю даже не стоит)
    Ответ написан
    Комментировать
  • Стоит ли покупать macbook pro 13 2020?

    mr_qpdb
    @mr_qpdb
    ⏱ - is not eternal
    Если вы будете работать с нейронными сетями, то Вам потребуется работать со специальным IDE, который предназначен для этого. В среднем, все IDE'ешки рекомендуют иметь 8гб оперативной памяти (минимум 4гб). Таким образом получается, что при использовании IDE - считай половина> оперативной памяти будет занято самим IDE. Вам так же потребуется работать с браузерами, это так-же занимает память, особенно гугл. Выходит, что оперативная память у Вас будет забита почти на полную. Представьте, что если Вам еще потребуется открыть каки-либо приложения, или поставить линукс на виртуалбокс. То вам категорически не хватит 8гб, как бы это горько ни звучало.
    Лично я, работаю на 4гб, и из-за этого приходится обходиться без IDE, без браузеров при написании кода и куча-куча неудобств. А макбук покупают для удобств, тем более человек его не каждый раз себе может позволить. Поэтому считаю, что следует покупать от 16гб, ведь макбук для этого и создан, чтобы радовать пользователя, а не приносить ему неудобства
    Ответ написан
    1 комментарий
  • Есть ли рабочий способ оплаты vps cloud от hetzner с помощью локальной карты от 10 апреля 2022?

    @RuslanTuktarov
    https://qna.habr.com/q/1123928 - тема тут развивается и обновляется.
    Ответ написан
    Комментировать
  • Как оплачивать хостинг?

    @RuslanTuktarov
    Актуальность на 08.07.2022. Платил через ГазпромБанк
    Банки:
    1. ГазпромБанк: 1% минимум 1000 руб (хотя по телефону говорили что 800 руб). Перевод возможен только через сотрудника банка. Мой перевод набрали с 3-й попытки
    2. Росбанк. Перевод в Евро только свыше 10 000 Евро.
    3. РайфайзенБанк: 2% от суммы, но не менее 60 Евро
    4. КредитЕвропаБанк: 1-3% (не помню), но не менее 200 Евро + 170 Евро за открытие счета.
    5. ЮниКредитБанк - swift переводы новым клиентам не осуществляют.


    Курсы покупки +- у всех одинаковы, колебания были от 68-70 руб за Евро.
    Платил 06.07.2022, платеж был на счету 08.07.2022
    -----------------------------------------------------------------------------------------------
    Актуальность 12.05.2022. Переводил swift 07.05.2022 через РайфайзенБанк. Комиссия 1% но не менее 30 Евро. В итоге из-за праздников Банк отправил перевод только 11.05.2022. Сам перевод Hetzner зачислил уже 12.05.2022.

    Комиссии других банков:
    • РосБанк - 1.5% или 0.75% если через приложение. Но курс Евро 101 руб.
    • КредитЕвропаБанк - 25 Евро за перевод + 1% от суммы, не менее 100 Евро. Курс Евро 76 руб.
    • РайфайзенБанк - 1% от суммы, но не менее 30 Евро, Курс Евро 80 руб.

    не переводят в Евро: Сбербанк, Тинькофф, АльфаБанк.
    Ответ написан
    5 комментариев
  • Полезны навыки и опыт UX/UI для backend (рhp)?

    Roshette
    @Roshette
    So love fucking laravel
    Вообще, если работать в России, то какие-то знания о front end тебе понадобятся. Знания UX и UI будет не плохими и большим плюсом в копилку, так как будешь мыслить ещё и творчески. Но если в лоб отвечать на твой вопрос, то нет, чисто php это не нужно
    Ответ написан
    3 комментария
  • Кнут - "Искусство программирования", как осилить?

    @GreenElephant
    Тоже задавался подобными вопросами. И здесь в том числе. В итоге решил проблему просто - поднял свою ленивую пятую точку с дивана, и перестал задавать глупые вопросы. А начал действовать. Нашел отличного репетитора, который мне накидал примерный списочек:
    1. 2-3 аля "дискретная математика для программистов". 2 точно знаю, третью не нашел :) Советую начать с автора Хагарди, доступно излагает.
    2. Параллельно с этим раскуриваем "дискретная математика, графы, матроиды"
    3. Посыпаем все это книгой "структуры данных и алгоритмы" Никлауса Вирта.
    4. Далее можно накидывать важную книгу Кнута - конкретная математика.
    5. Потом уже можно потихоньку начинать читать Искусство Программирования.

    Собственно я такому курсу и придерживаюсь, только помимо книжек из 1 пункта, я еще накинул замечательный курс на степике по дисктерным структурам - ссылочка Там же есть курс введение в матанализ.
    Ну а Вам, коллега, могу еще порекомендовать в качестве разминки школьные книги по математике автор которых - Виленкин. У него еще есть книга "Популярная комбинаторика", что тоже будет полезным. Вообще школьный курс нагоняется учебниками с 5 по 11 класс. От корки до корки вдумчивое чтение с последующим решением задач. Как-то так.
    Еще полезным будет почитать о мат индукции и как решают нестандартные задачи
    Ответ написан
    3 комментария