gpt4 book ai didi

python-3.x - Discord.py:访问发送者计算机上的文件。从服务器上任何用户的本地驱动器播放歌曲

转载 作者:行者123 更新时间:2023-12-04 23:35:02 25 4
gpt4 key购买 nike

我有一个可以从我的电脑播放音乐的机器人。有没有办法从发送消息的人的计算机上播放歌曲?我的想法是使用 message.author以某种方式访问​​该人的 session 并进入他们的驱动器。这是我的机器人。它可以加入语音 channel ,从本地文件路径创建播放列表,使用停止/暂停/播放/下一个/上一个控件启动播放列表或单个文件:

import discord
import os.path
import logging
import asyncio
from os import path

global ready
global vc
global source
global songQueue
global songIndex
global commandList
global stopPlaylist

ready = False
stopPlaylist = False
songQueue = []
songIndex = 0

logger = logging.getLogger('discord')
logger.setLevel(logging.DEBUG)
handler = logging.FileHandler(filename='D:\DnD\DiscordBot\discord.log', encoding='utf-8', mode='w')
handler.setFormatter(logging.Formatter('%(asctime)s:%(levelname)s:%(name)s: %(message)s'))
logger.addHandler(handler)

client = discord.Client()
commands = [
'!connect\nConnect to a voice channel by channel id. Use !channels to find the desired id.\nExample Command: !connect 827202170973323305\n\n',
'!channels\nLists all voice channels and their connection id.\n\n',
'!add\nAdd a file path to the playlist.\nExample Command: !add D:\\DnD\\DiscordBot\\mySong.mp3\n\n',
'!delete\nDeletes the last song added to the playlist.\n\n',
'!view\nDisplays the current playlist, in order.\n\n',
'!playlist\nStarts the playlist from the beginning, or optionally add a number as the start position.\nExample Command: !playlist 3\n\n',
'!playSong\nPlays a specified file.\nExample Command: !playSong D:\\DnD\\DiscordBot\\mySong.mp3\n\n',
'!next\nPlays next song in playlist.\n\n',
'!prev\nPlays previous song in playlist.\n\n',
'!stop\nStops all music song. Playlist will restart from the beginning.\n\n',
'!pause\nPauses the current song. Restart with !resumeSong.\n\n',
'!resume\nResumes the current song.\n\n'
'!status\nLets you know if the bot thinks it is playing music.'
]
commandList=''
for command in commands:
commandList+=command

@client.event
async def on_ready():
print('We have logged in as {0.user}'.format(client))

@client.event
async def on_message(message):
global ready
global vc
global source
global songQueue
global songIndex
global commandList
global stopPlaylist

if message.author == client.user:
return
#!help
if message.content.startswith('!help'):
await message.channel.send('{0}'.format(commandList))
return
#!connect
if message.content.startswith('!connect'):
if ready:
await message.channel.send('Bot [{0}] is already connected to a voice channel.'.format(client.user))
return
channel = int(message.content[9:])
vc = await client.get_channel(channel).connect()
ready = True
await message.channel.send('Bot [{0}] is connecting to voice.'.format(client.user))
return
#!channels
if message.content.startswith('!channels'):
channelList = ''
for channel in client.get_all_channels():
if channel.type == discord.ChannelType.voice:
channelList += 'name: ' + channel.name + '\n'
channelList += 'id: ' + str(channel.id) + '\n\n'
await message.channel.send('{0}'.format(channelList))
return
#!add
if message.content.startswith('!add'):
song = message.content[5:]
if not path.exists(song):
await message.channel.send('Song not found or invalid path specified.\nSpecified Path: {0}\nExample command: !addSong C:\\Users\\Public\\Music\\mySong.mp3'.format(song))
return
songQueue.append(song)
await message.channel.send('Song added: {0}\nCurrent playist length: {1} song(s)'.format(song,len(songQueue)))
return
#!delete
if message.content.startswith('!delete'):
if len(songQueue) == 0:
await message.channel.send('Playlist is empty. Use !addSong, !viewList, and !playList to manage playlists.')
return
await message.channel.send('Removed song: {0}'.format(songQueue.pop()))
return
#!view
if message.content.startswith('!view'):
if len(songQueue) == 0:
await message.channel.send('Playlist is empty. Use !addSong, !deleteSong, and !playList to manage playlists.')
return
await message.channel.send('Current Playlist:\n{0}'.format('\n'.join(songQueue)))
return
#play commands
if message.content.startswith('!play'):
if not ready:
await message.channel.send('Bot [{0}] is not connected to a voice channel.'.format(client.user))
return
#!playlist
if message.content.startswith('!playlist'):
try:
songIndex = int(message.content[10:]) - 1
if songIndex >= len(songQueue):
songIndex = len(songQueue) - 1
except:
pass
playSong()
return
#!playSong
if message.content.startswith('!playSong'):
song = message.content[10:]
if not path.exists(song):
await message.channel.send('Song not found or invalid path specified.\nSpecified Path: {0}\nExample command: !play C:\\Users\\Public\\Music\\mySong.mp3'.format(song))
return
source = discord.FFmpegPCMAudio(song)
vc.play(source, after=None)
await message.channel.send('Playing song: {0}'.format(song))
return
#!next
if message.content.startswith('!next'):
vc.stop()
#!prev
if message.content.startswith('!prev'):
songIndex -= 2
if songIndex < -1:
songIndex = -1
vc.stop()
#!stop
if message.content.startswith('!stop'):
if not ready:
await message.channel.send('Bot [{0}] is not connected to a voice channel.'.format(client.user))
return
vc.stop()
songIndex = 0
stopPlaylist = True
await message.channel.send('Stopping music.')
return
#!pause
if message.content.startswith('!pause'):
if not ready:
await message.channel.send('Bot [{0}] is not connected to a voice channel.'.format(client.user))
return
vc.pause()
await message.channel.send('Pausing music.')
return
#!resume
if message.content.startswith('!resume'):
if not ready:
await message.channel.send('Bot [{0}] is not connected to a voice channel.'.format(client.user))
return
vc.resume()
await message.channel.send('Resuming music.')
return
#!status
if message.content.startswith('!status'):
if not ready:
await message.channel.send('Bot [{0}] is not connected to a voice channel.'.format(client.user))
return
if vc.is_playing():
await message.channel.send('Something is playing.')
return
await message.channel.send('Nothing is playing.')
return

def playSong():
global songQueue
global songIndex
global vc
try:
song = songQueue[songIndex]
source = discord.FFmpegPCMAudio(song)
vc.play(source, after=nextSong)
except Exception as e:
print('playSong error {0}'.format(e))

def nextSong(error):
global songQueue
global songIndex
global stopPlaylist
try:
songIndex += 1
if songIndex >= len(songQueue):
stopPlaylist = True
if stopPlaylist:
songIndex = 0
stopPlaylist = False
return
futureFunction = asyncio.run_coroutine_threadsafe(playSong(), client.loop)
futureFunction.result()
except Exception as e:
print('nextSong error {0}'.format(e))

#@client.event
#async def on_logout(user)
# global ready
# if user == client.user:
# ready = False

client.run('TOKEN')

最佳答案

好的,您必须知道的是,您可以访问您的本地驱动器,因为机器人在其上运行,但是您当然不能访问其他用户的驱动器(这将非常危险)。 discord.py 和 Discord 都不允许这样做。

关于python-3.x - Discord.py:访问发送者计算机上的文件。从服务器上任何用户的本地驱动器播放歌曲,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66959866/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com