Création Repo pour mon bot Le Tamiseur
This commit is contained in:
9
.eslintrc.json
Normal file
9
.eslintrc.json
Normal file
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"parserOptions": {
|
||||
"ecmaVersion": "latest"
|
||||
},
|
||||
|
||||
"env": {
|
||||
"es6": true
|
||||
}
|
||||
}
|
||||
63
.gitattributes
vendored
Normal file
63
.gitattributes
vendored
Normal file
@@ -0,0 +1,63 @@
|
||||
###############################################################################
|
||||
# Set default behavior to automatically normalize line endings.
|
||||
###############################################################################
|
||||
* text=auto
|
||||
|
||||
###############################################################################
|
||||
# Set default behavior for command prompt diff.
|
||||
#
|
||||
# This is need for earlier builds of msysgit that does not have it on by
|
||||
# default for csharp files.
|
||||
# Note: This is only used by command line
|
||||
###############################################################################
|
||||
#*.cs diff=csharp
|
||||
|
||||
###############################################################################
|
||||
# Set the merge driver for project and solution files
|
||||
#
|
||||
# Merging from the command prompt will add diff markers to the files if there
|
||||
# are conflicts (Merging from VS is not affected by the settings below, in VS
|
||||
# the diff markers are never inserted). Diff markers may cause the following
|
||||
# file extensions to fail to load in VS. An alternative would be to treat
|
||||
# these files as binary and thus will always conflict and require user
|
||||
# intervention with every merge. To do so, just uncomment the entries below
|
||||
###############################################################################
|
||||
#*.sln merge=binary
|
||||
#*.csproj merge=binary
|
||||
#*.vbproj merge=binary
|
||||
#*.vcxproj merge=binary
|
||||
#*.vcproj merge=binary
|
||||
#*.dbproj merge=binary
|
||||
#*.fsproj merge=binary
|
||||
#*.lsproj merge=binary
|
||||
#*.wixproj merge=binary
|
||||
#*.modelproj merge=binary
|
||||
#*.sqlproj merge=binary
|
||||
#*.wwaproj merge=binary
|
||||
|
||||
###############################################################################
|
||||
# behavior for image files
|
||||
#
|
||||
# image files are treated as binary by default.
|
||||
###############################################################################
|
||||
#*.jpg binary
|
||||
#*.png binary
|
||||
#*.gif binary
|
||||
|
||||
###############################################################################
|
||||
# diff behavior for common document formats
|
||||
#
|
||||
# Convert binary document formats to text before diffing them. This feature
|
||||
# is only available from the command line. Turn it on by uncommenting the
|
||||
# entries below.
|
||||
###############################################################################
|
||||
#*.doc diff=astextplain
|
||||
#*.DOC diff=astextplain
|
||||
#*.docx diff=astextplain
|
||||
#*.DOCX diff=astextplain
|
||||
#*.dot diff=astextplain
|
||||
#*.DOT diff=astextplain
|
||||
#*.pdf diff=astextplain
|
||||
#*.PDF diff=astextplain
|
||||
#*.rtf diff=astextplain
|
||||
#*.RTF diff=astextplain
|
||||
370
.gitignore
vendored
Normal file
370
.gitignore
vendored
Normal file
@@ -0,0 +1,370 @@
|
||||
## Ignore Visual Studio temporary files, build results, and
|
||||
## files generated by popular Visual Studio add-ons.
|
||||
##
|
||||
## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore
|
||||
|
||||
# User-specific files
|
||||
*.rsuser
|
||||
*.suo
|
||||
*.user
|
||||
*.userosscache
|
||||
*.sln.docstates
|
||||
|
||||
# User-specific files (MonoDevelop/Xamarin Studio)
|
||||
*.userprefs
|
||||
|
||||
# Mono auto generated files
|
||||
mono_crash.*
|
||||
|
||||
# Build results
|
||||
[Dd]ebug/
|
||||
[Dd]ebugPublic/
|
||||
[Rr]elease/
|
||||
[Rr]eleases/
|
||||
x64/
|
||||
x86/
|
||||
[Ww][Ii][Nn]32/
|
||||
[Aa][Rr][Mm]/
|
||||
[Aa][Rr][Mm]64/
|
||||
bld/
|
||||
[Bb]in/
|
||||
[Oo]bj/
|
||||
[Oo]ut/
|
||||
[Ll]og/
|
||||
[Ll]ogs/
|
||||
|
||||
# Visual Studio 2015/2017 cache/options directory
|
||||
.vs/
|
||||
# Uncomment if you have tasks that create the project's static files in wwwroot
|
||||
#wwwroot/
|
||||
|
||||
# Visual Studio 2017 auto generated files
|
||||
Generated\ Files/
|
||||
|
||||
# MSTest test Results
|
||||
[Tt]est[Rr]esult*/
|
||||
[Bb]uild[Ll]og.*
|
||||
|
||||
# NUnit
|
||||
*.VisualState.xml
|
||||
TestResult.xml
|
||||
nunit-*.xml
|
||||
|
||||
# Build Results of an ATL Project
|
||||
[Dd]ebugPS/
|
||||
[Rr]eleasePS/
|
||||
dlldata.c
|
||||
|
||||
# Benchmark Results
|
||||
BenchmarkDotNet.Artifacts/
|
||||
|
||||
# .NET Core
|
||||
project.lock.json
|
||||
project.fragment.lock.json
|
||||
artifacts/
|
||||
|
||||
# ASP.NET Scaffolding
|
||||
ScaffoldingReadMe.txt
|
||||
|
||||
# StyleCop
|
||||
StyleCopReport.xml
|
||||
|
||||
# Files built by Visual Studio
|
||||
*_i.c
|
||||
*_p.c
|
||||
*_h.h
|
||||
*.ilk
|
||||
*.meta
|
||||
*.obj
|
||||
*.iobj
|
||||
*.pch
|
||||
*.pdb
|
||||
*.ipdb
|
||||
*.pgc
|
||||
*.pgd
|
||||
*.rsp
|
||||
*.sbr
|
||||
*.tlb
|
||||
*.tli
|
||||
*.tlh
|
||||
*.tmp
|
||||
*.tmp_proj
|
||||
*_wpftmp.csproj
|
||||
*.log
|
||||
*.vspscc
|
||||
*.vssscc
|
||||
.builds
|
||||
*.pidb
|
||||
*.svclog
|
||||
*.scc
|
||||
|
||||
# Chutzpah Test files
|
||||
_Chutzpah*
|
||||
|
||||
# Visual C++ cache files
|
||||
ipch/
|
||||
*.aps
|
||||
*.ncb
|
||||
*.opendb
|
||||
*.opensdf
|
||||
*.sdf
|
||||
*.cachefile
|
||||
*.VC.db
|
||||
*.VC.VC.opendb
|
||||
|
||||
# Visual Studio profiler
|
||||
*.psess
|
||||
*.vsp
|
||||
*.vspx
|
||||
*.sap
|
||||
|
||||
# Visual Studio Trace Files
|
||||
*.e2e
|
||||
|
||||
# TFS 2012 Local Workspace
|
||||
$tf/
|
||||
|
||||
# Guidance Automation Toolkit
|
||||
*.gpState
|
||||
|
||||
# ReSharper is a .NET coding add-in
|
||||
_ReSharper*/
|
||||
*.[Rr]e[Ss]harper
|
||||
*.DotSettings.user
|
||||
|
||||
# TeamCity is a build add-in
|
||||
_TeamCity*
|
||||
|
||||
# DotCover is a Code Coverage Tool
|
||||
*.dotCover
|
||||
|
||||
# AxoCover is a Code Coverage Tool
|
||||
.axoCover/*
|
||||
!.axoCover/settings.json
|
||||
|
||||
# Coverlet is a free, cross platform Code Coverage Tool
|
||||
coverage*.json
|
||||
coverage*.xml
|
||||
coverage*.info
|
||||
|
||||
# Visual Studio code coverage results
|
||||
*.coverage
|
||||
*.coveragexml
|
||||
|
||||
# NCrunch
|
||||
_NCrunch_*
|
||||
.*crunch*.local.xml
|
||||
nCrunchTemp_*
|
||||
|
||||
# MightyMoose
|
||||
*.mm.*
|
||||
AutoTest.Net/
|
||||
|
||||
# Web workbench (sass)
|
||||
.sass-cache/
|
||||
|
||||
# Installshield output folder
|
||||
[Ee]xpress/
|
||||
|
||||
# DocProject is a documentation generator add-in
|
||||
DocProject/buildhelp/
|
||||
DocProject/Help/*.HxT
|
||||
DocProject/Help/*.HxC
|
||||
DocProject/Help/*.hhc
|
||||
DocProject/Help/*.hhk
|
||||
DocProject/Help/*.hhp
|
||||
DocProject/Help/Html2
|
||||
DocProject/Help/html
|
||||
|
||||
# Click-Once directory
|
||||
publish/
|
||||
|
||||
# Publish Web Output
|
||||
*.[Pp]ublish.xml
|
||||
*.azurePubxml
|
||||
# Note: Comment the next line if you want to checkin your web deploy settings,
|
||||
# but database connection strings (with potential passwords) will be unencrypted
|
||||
*.pubxml
|
||||
*.publishproj
|
||||
|
||||
# Microsoft Azure Web App publish settings. Comment the next line if you want to
|
||||
# checkin your Azure Web App publish settings, but sensitive information contained
|
||||
# in these scripts will be unencrypted
|
||||
PublishScripts/
|
||||
|
||||
# NuGet Packages
|
||||
*.nupkg
|
||||
# NuGet Symbol Packages
|
||||
*.snupkg
|
||||
# The packages folder can be ignored because of Package Restore
|
||||
**/[Pp]ackages/*
|
||||
# except build/, which is used as an MSBuild target.
|
||||
!**/[Pp]ackages/build/
|
||||
# Uncomment if necessary however generally it will be regenerated when needed
|
||||
#!**/[Pp]ackages/repositories.config
|
||||
# NuGet v3's project.json files produces more ignorable files
|
||||
*.nuget.props
|
||||
*.nuget.targets
|
||||
|
||||
# Microsoft Azure Build Output
|
||||
csx/
|
||||
*.build.csdef
|
||||
|
||||
# Microsoft Azure Emulator
|
||||
ecf/
|
||||
rcf/
|
||||
|
||||
# Windows Store app package directories and files
|
||||
AppPackages/
|
||||
BundleArtifacts/
|
||||
Package.StoreAssociation.xml
|
||||
_pkginfo.txt
|
||||
*.appx
|
||||
*.appxbundle
|
||||
*.appxupload
|
||||
|
||||
# Visual Studio cache files
|
||||
# files ending in .cache can be ignored
|
||||
*.[Cc]ache
|
||||
# but keep track of directories ending in .cache
|
||||
!?*.[Cc]ache/
|
||||
|
||||
# Others
|
||||
ClientBin/
|
||||
~$*
|
||||
*~
|
||||
*.dbmdl
|
||||
*.dbproj.schemaview
|
||||
*.jfm
|
||||
*.pfx
|
||||
*.publishsettings
|
||||
orleans.codegen.cs
|
||||
|
||||
# Including strong name files can present a security risk
|
||||
# (https://github.com/github/gitignore/pull/2483#issue-259490424)
|
||||
#*.snk
|
||||
|
||||
# Since there are multiple workflows, uncomment next line to ignore bower_components
|
||||
# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
|
||||
#bower_components/
|
||||
|
||||
# RIA/Silverlight projects
|
||||
Generated_Code/
|
||||
|
||||
# Backup & report files from converting an old project file
|
||||
# to a newer Visual Studio version. Backup files are not needed,
|
||||
# because we have git ;-)
|
||||
_UpgradeReport_Files/
|
||||
Backup*/
|
||||
UpgradeLog*.XML
|
||||
UpgradeLog*.htm
|
||||
ServiceFabricBackup/
|
||||
*.rptproj.bak
|
||||
|
||||
# SQL Server files
|
||||
*.mdf
|
||||
*.ldf
|
||||
*.ndf
|
||||
|
||||
# Business Intelligence projects
|
||||
*.rdl.data
|
||||
*.bim.layout
|
||||
*.bim_*.settings
|
||||
*.rptproj.rsuser
|
||||
*- [Bb]ackup.rdl
|
||||
*- [Bb]ackup ([0-9]).rdl
|
||||
*- [Bb]ackup ([0-9][0-9]).rdl
|
||||
|
||||
# Microsoft Fakes
|
||||
FakesAssemblies/
|
||||
|
||||
# GhostDoc plugin setting file
|
||||
*.GhostDoc.xml
|
||||
|
||||
# Node.js Tools for Visual Studio
|
||||
.ntvs_analysis.dat
|
||||
node_modules/
|
||||
|
||||
# Visual Studio 6 build log
|
||||
*.plg
|
||||
|
||||
# Visual Studio 6 workspace options file
|
||||
*.opt
|
||||
|
||||
# Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
|
||||
*.vbw
|
||||
|
||||
# Visual Studio LightSwitch build output
|
||||
**/*.HTMLClient/GeneratedArtifacts
|
||||
**/*.DesktopClient/GeneratedArtifacts
|
||||
**/*.DesktopClient/ModelManifest.xml
|
||||
**/*.Server/GeneratedArtifacts
|
||||
**/*.Server/ModelManifest.xml
|
||||
_Pvt_Extensions
|
||||
|
||||
# Paket dependency manager
|
||||
.paket/paket.exe
|
||||
paket-files/
|
||||
|
||||
# FAKE - F# Make
|
||||
.fake/
|
||||
|
||||
# CodeRush personal settings
|
||||
.cr/personal
|
||||
|
||||
# Python Tools for Visual Studio (PTVS)
|
||||
__pycache__/
|
||||
*.pyc
|
||||
|
||||
# Cake - Uncomment if you are using it
|
||||
# tools/**
|
||||
# !tools/packages.config
|
||||
|
||||
# Tabs Studio
|
||||
*.tss
|
||||
|
||||
# Telerik's JustMock configuration file
|
||||
*.jmconfig
|
||||
|
||||
# BizTalk build output
|
||||
*.btp.cs
|
||||
*.btm.cs
|
||||
*.odx.cs
|
||||
*.xsd.cs
|
||||
|
||||
# OpenCover UI analysis results
|
||||
OpenCover/
|
||||
|
||||
# Azure Stream Analytics local run output
|
||||
ASALocalRun/
|
||||
|
||||
# MSBuild Binary and Structured Log
|
||||
*.binlog
|
||||
|
||||
# NVidia Nsight GPU debugger configuration file
|
||||
*.nvuser
|
||||
|
||||
# MFractors (Xamarin productivity tool) working folder
|
||||
.mfractor/
|
||||
|
||||
# Local History for Visual Studio
|
||||
.localhistory/
|
||||
|
||||
# BeatPulse healthcheck temp database
|
||||
healthchecksdb
|
||||
|
||||
# Backup folder for Package Reference Convert tool in Visual Studio 2017
|
||||
MigrationBackup/
|
||||
|
||||
# Ionide (cross platform F# VS Code tools) working folder
|
||||
.ionide/
|
||||
|
||||
# Fody - auto-generated XML schema
|
||||
FodyWeavers.xsd
|
||||
|
||||
history.txt
|
||||
test.js
|
||||
.env
|
||||
/.vs/Topos/
|
||||
/public/css/
|
||||
/public/download/
|
||||
167
.npmrc
Executable file
167
.npmrc
Executable file
@@ -0,0 +1,167 @@
|
||||
;;;;
|
||||
; npm projectconfig file: C:\Users\Zachary\source\repos\Discord\.npmrc
|
||||
; this is a simple ini-formatted file
|
||||
; lines that start with semi-colons are comments
|
||||
; run `npm help 7 config` for documentation of the various options
|
||||
;
|
||||
; Configs like `@scope:registry` map a scope to a given registry url.
|
||||
;
|
||||
; Configs like `//<hostname>/:_authToken` are auth that is restricted
|
||||
; to the registry host specified.
|
||||
|
||||
|
||||
|
||||
;;;;
|
||||
; all available options shown below with default values
|
||||
;;;;
|
||||
|
||||
|
||||
; _auth=null
|
||||
; access=null
|
||||
; all=false
|
||||
; allow-same-version=false
|
||||
; also=null
|
||||
; audit=true
|
||||
; audit-level=null
|
||||
; auth-type=web
|
||||
; before=null
|
||||
; bin-links=true
|
||||
; browser=null
|
||||
; ca=null
|
||||
; cache=C:\Users\Zachary\AppData\Local/npm-cache
|
||||
; cache-max=null
|
||||
; cache-min=0
|
||||
; cafile=null
|
||||
; call=
|
||||
; cert=null
|
||||
; ci-name=null
|
||||
; cidr=null
|
||||
; color=true
|
||||
; commit-hooks=true
|
||||
; depth=null
|
||||
; description=true
|
||||
; dev=false
|
||||
;
|
||||
; diff-ignore-all-space=false
|
||||
; diff-name-only=false
|
||||
; diff-no-prefix=false
|
||||
; diff-dst-prefix=b/
|
||||
; diff-src-prefix=a/
|
||||
; diff-text=false
|
||||
; diff-unified=3
|
||||
; dry-run=false
|
||||
; editor=C:\Windows\notepad.exe
|
||||
; engine-strict=false
|
||||
; fetch-retries=2
|
||||
; fetch-retry-factor=10
|
||||
; fetch-retry-maxtimeout=60000
|
||||
; fetch-retry-mintimeout=10000
|
||||
; fetch-timeout=300000
|
||||
; force=false
|
||||
; foreground-scripts=false
|
||||
; format-package-lock=true
|
||||
; fund=true
|
||||
; git=git
|
||||
; git-tag-version=true
|
||||
; global=false
|
||||
; globalconfig=
|
||||
; global-style=false
|
||||
; heading=npm
|
||||
; https-proxy=null
|
||||
; if-present=false
|
||||
; ignore-scripts=false
|
||||
;
|
||||
; include-staged=false
|
||||
; include-workspace-root=false
|
||||
; init-author-email=
|
||||
; init-author-name=
|
||||
; init-author-url=
|
||||
; init-license=ISC
|
||||
; init-module=~/.npm-init.js
|
||||
; init-version=1.0.0
|
||||
; init.author.email=
|
||||
; init.author.name=
|
||||
; init.author.url=
|
||||
; init.license=ISC
|
||||
; init.module=~/.npm-init.js
|
||||
; init.version=1.0.0
|
||||
; install-links=true
|
||||
; install-strategy=hoisted
|
||||
; json=false
|
||||
; key=null
|
||||
; legacy-bundling=false
|
||||
; legacy-peer-deps=false
|
||||
; link=false
|
||||
; local-address=null
|
||||
; location=user
|
||||
; lockfile-version=null
|
||||
; loglevel=notice
|
||||
; logs-dir=null
|
||||
; logs-max=10
|
||||
; long=false
|
||||
; maxsockets=15
|
||||
; message=%s
|
||||
; node-options=null
|
||||
; noproxy=
|
||||
; offline=false
|
||||
;
|
||||
; omit-lockfile-registry-resolved=false
|
||||
; only=null
|
||||
; optional=null
|
||||
; otp=null
|
||||
;
|
||||
; package-lock=true
|
||||
; package-lock-only=false
|
||||
; pack-destination=.
|
||||
; parseable=false
|
||||
; prefer-offline=false
|
||||
; prefer-online=false
|
||||
; prefix=
|
||||
; preid=
|
||||
; production=null
|
||||
; progress=true
|
||||
; proxy=null
|
||||
; read-only=false
|
||||
; rebuild-bundle=true
|
||||
; registry=https://registry.npmjs.org/
|
||||
; replace-registry-host=npmjs
|
||||
; save=true
|
||||
; save-bundle=false
|
||||
; save-dev=false
|
||||
; save-exact=false
|
||||
; save-optional=false
|
||||
; save-peer=false
|
||||
; save-prefix=^
|
||||
; save-prod=false
|
||||
; scope=
|
||||
; script-shell=null
|
||||
; searchexclude=
|
||||
; searchlimit=20
|
||||
; searchopts=
|
||||
; searchstaleness=900
|
||||
; shell=C:\Windows\system32\cmd.exe
|
||||
; shrinkwrap=true
|
||||
; sign-git-commit=false
|
||||
; sign-git-tag=false
|
||||
; strict-peer-deps=false
|
||||
; strict-ssl=true
|
||||
; tag=latest
|
||||
; tag-version-prefix=v
|
||||
; timing=false
|
||||
; tmp=C:\Users\Zachary\AppData\Local\Temp
|
||||
; umask=0
|
||||
; unicode=false
|
||||
; update-notifier=true
|
||||
; usage=false
|
||||
; user-agent=npm/{npm-version} node/{node-version} {platform} {arch} workspaces/{workspaces} {ci}
|
||||
; userconfig=~/.npmrc
|
||||
; version=false
|
||||
; versions=false
|
||||
; viewer=browser
|
||||
; which=null
|
||||
;
|
||||
; workspaces=null
|
||||
; workspaces-update=true
|
||||
; yes=null
|
||||
|
||||
msvs_version=2022
|
||||
26
.vscode/launch.json
vendored
Normal file
26
.vscode/launch.json
vendored
Normal file
@@ -0,0 +1,26 @@
|
||||
{
|
||||
// Utilisez IntelliSense pour en savoir plus sur les attributs possibles.
|
||||
// Pointez pour afficher la description des attributs existants.
|
||||
// Pour plus d'informations, visitez : https://go.microsoft.com/fwlink/?linkid=830387
|
||||
"version": "0.2.0",
|
||||
"configurations": [
|
||||
{
|
||||
"type": "node",
|
||||
"request": "launch",
|
||||
"name": "Launch",
|
||||
"program": "${workspaceFolder}/app.js",
|
||||
"skipFiles": ["<node_internals>/**"]
|
||||
},
|
||||
{
|
||||
"type": "node",
|
||||
"request": "launch",
|
||||
"name": "Nodemon",
|
||||
"program": "${workspaceFolder}/app.js",
|
||||
"skipFiles": ["<node_internals>/**"],
|
||||
"runtimeExecutable": "nodemon",
|
||||
"console": "integratedTerminal",
|
||||
"internalConsoleOptions": "neverOpen",
|
||||
"restart": true
|
||||
}
|
||||
]
|
||||
}
|
||||
56
Tamiseur.njsproj
Executable file
56
Tamiseur.njsproj
Executable file
@@ -0,0 +1,56 @@
|
||||
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0">
|
||||
<PropertyGroup>
|
||||
<VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">14.0</VisualStudioVersion>
|
||||
<VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
|
||||
<Name>Tamiseur</Name>
|
||||
<RootNamespace>Tamiseur</RootNamespace>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
|
||||
<PropertyGroup>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
<SchemaVersion>2.0</SchemaVersion>
|
||||
<ProjectGuid>622ae81e-ec50-404b-93cc-b651fb21151e</ProjectGuid>
|
||||
<ProjectHome>.</ProjectHome>
|
||||
<StartupFile>app.js</StartupFile>
|
||||
<StartWebBrowser>False</StartWebBrowser>
|
||||
<SearchPath>
|
||||
</SearchPath>
|
||||
<WorkingDirectory>.</WorkingDirectory>
|
||||
<OutputPath>.</OutputPath>
|
||||
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
|
||||
<ProjectTypeGuids>{3AF33F2E-1136-4D97-BBB7-1795711AC8B8};{9092AA53-FB77-4645-B42D-1CCCA6BD08BD}</ProjectTypeGuids>
|
||||
<StartWebBrowser>false</StartWebBrowser>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)' == 'Release' ">
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Content Include=".env" />
|
||||
<Content Include=".npmrc" />
|
||||
<Content Include="app.js" />
|
||||
<Content Include="commands\update.js" />
|
||||
<Content Include="commands\spam.js" />
|
||||
<Content Include="commands\ping.js" />
|
||||
<Content Include="commands\resume.js" />
|
||||
<Content Include="commands\skip.js" />
|
||||
<Content Include="commands\stop.js" />
|
||||
<Content Include="commands\pause.js" />
|
||||
<Content Include="commands\play.js" />
|
||||
<Content Include="events\voiceStateUpdate.js" />
|
||||
<Content Include="events\guildMemberRemove.js" />
|
||||
<Content Include="events\guildMemberAdd.js" />
|
||||
<Content Include="events\interactionCreate.js" />
|
||||
<Content Include="events\ready.js" />
|
||||
<Content Include="package.json" />
|
||||
<Content Include="README.md" />
|
||||
<Content Include="stronger_shorter.mp3" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Folder Include="commands\" />
|
||||
<Folder Include="events\" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(VSToolsPath)\Node.js Tools\Microsoft.NodejsToolsV2.targets" />
|
||||
</Project>
|
||||
25
Tamiseur.sln
Executable file
25
Tamiseur.sln
Executable file
@@ -0,0 +1,25 @@
|
||||
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio Version 17
|
||||
VisualStudioVersion = 17.4.33122.133
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{9092AA53-FB77-4645-B42D-1CCCA6BD08BD}") = "Tamiseur", "Tamiseur.njsproj", "{622AE81E-EC50-404B-93CC-B651FB21151E}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
Release|Any CPU = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{622AE81E-EC50-404B-93CC-B651FB21151E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{622AE81E-EC50-404B-93CC-B651FB21151E}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{622AE81E-EC50-404B-93CC-B651FB21151E}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{622AE81E-EC50-404B-93CC-B651FB21151E}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||
SolutionGuid = {8F37C3A1-5B9D-413A-9661-15680F2A8EEA}
|
||||
EndGlobalSection
|
||||
EndGlobal
|
||||
74
app.js
Executable file
74
app.js
Executable file
@@ -0,0 +1,74 @@
|
||||
// PACKAGES AND VARIABLES
|
||||
const fs = require('fs')
|
||||
const { Client, Collection, GatewayIntentBits, REST, Routes } = require('discord.js')
|
||||
const { Player } = require("discord-player")
|
||||
const { YouTubeExtractor, SpotifyExtractor } = require("@discord-player/extractor")
|
||||
require('dotenv').config()
|
||||
|
||||
let intents = [GatewayIntentBits.Guilds, GatewayIntentBits.GuildMembers, GatewayIntentBits.GuildVoiceStates]
|
||||
const client = new Client({ intents })
|
||||
|
||||
// EVENTS HANDLING
|
||||
const eventFiles = fs.readdirSync('./events').filter(file => file.endsWith('.js'))
|
||||
for (const file of eventFiles) {
|
||||
let event = require(`./events/${file}`)
|
||||
if (event.once) client.once(event.name, (...args) => {
|
||||
//console.log(`\u001b[1;35m Event '${event.name}' executed.`)
|
||||
event.execute(...args)
|
||||
})
|
||||
else client.on(event.name, (...args) => {
|
||||
//console.log(`\u001b[1;35m Event '${event.name}' executed.`)
|
||||
event.execute(...args)
|
||||
})
|
||||
}
|
||||
|
||||
// COMMANDS HANDLING
|
||||
client.commands = new Collection()
|
||||
let commands = []
|
||||
let commandFolders = fs.readdirSync('./commands')
|
||||
for (folder of commandFolders) {
|
||||
let folderPath = `./commands/${folder}`
|
||||
let commandFiles = fs.readdirSync(folderPath).filter(file => file.endsWith('.js'))
|
||||
for (file of commandFiles) {
|
||||
let command = require(`${folderPath}/${file}`)
|
||||
if ('data' in command && 'execute' in command) { commands.push(command.data.toJSON()); client.commands.set(command.data.name, command) }
|
||||
else console.log(`\u001b[1;35m [WARNING] The command at ${`${folderPath}/${file}`} is missing a required "data" or "execute" property.`)
|
||||
}
|
||||
}
|
||||
|
||||
// COMMANDS REGISTERING
|
||||
const rest = new REST({ version: '10' }).setToken(process.env.DISCORD_TOKEN);
|
||||
(async () => {
|
||||
//console.log(`\u001b[1;35m Started refreshing ${commands.length} application (/) commands.`)
|
||||
try {
|
||||
let data = await rest.put(Routes.applicationCommands('1065047326860783636'), { body: commands })
|
||||
//console.log(`\u001b[1;35m Successfully reloaded ${data.length} application (/) commands.`)
|
||||
}
|
||||
catch (error) { console.error(error) }
|
||||
})()
|
||||
|
||||
// BUTTONS HANDLING
|
||||
client.buttons = new Collection()
|
||||
let buttonFiles = fs.readdirSync('./buttons').filter(file => file.endsWith('.js'))
|
||||
for (const file of buttonFiles) {
|
||||
let button = require(`./buttons/${file}`)
|
||||
if ('id' in button && 'execute' in button) client.buttons.set(button.id, button)
|
||||
else console.log(`\u001b[1;35m [WARNING] The button ${file} is missing a required "id" or "execute" property.`)
|
||||
}
|
||||
|
||||
// PLAYER INITIALIZATION
|
||||
const player = new Player(client, { autoRegisterExtractor: false })
|
||||
player.extractors.register(YouTubeExtractor)
|
||||
player.extractors.register(SpotifyExtractor)
|
||||
|
||||
// PLAYER EVENTS HANDLING
|
||||
const eventPlayerFiles = fs.readdirSync('./eventsPlayer').filter(file => file.endsWith('.js'))
|
||||
for (const file of eventPlayerFiles) {
|
||||
let event = require(`./eventsPlayer/${file}`)
|
||||
if (['debug'].includes(event.name)) continue
|
||||
player.events.on(event.name, (...args) => event.execute(...args))
|
||||
}
|
||||
//player.on('debug', async (message) => { console.log(`General player debug event: ${message}`) })
|
||||
|
||||
// LAUNCH
|
||||
client.login()
|
||||
12
buttons/loop.js
Normal file
12
buttons/loop.js
Normal file
@@ -0,0 +1,12 @@
|
||||
const { useQueue } = require("discord-player")
|
||||
|
||||
module.exports = {
|
||||
id: 'loop',
|
||||
async execute(interaction) {
|
||||
let queue = useQueue(interaction.guild.id)
|
||||
let loop = queue.repeatMode === 0 ? 1 : queue.repeatMode === 1 ? 2 : queue.repeatMode === 2 ? 3 : 0
|
||||
queue.setRepeatMode(loop)
|
||||
await interaction.reply({ content:`Boucle ${loop === 0 ? "désactivée" : loop === 1 ? "en mode Titre" : loop === 2 ? "en mode File d'Attente" : "en autoplay"}.`, ephemeral: true })
|
||||
setTimeout(async () => { await interaction.deleteReply() }, 20000)
|
||||
}
|
||||
}
|
||||
11
buttons/pause.js
Normal file
11
buttons/pause.js
Normal file
@@ -0,0 +1,11 @@
|
||||
const { useQueue } = require("discord-player")
|
||||
|
||||
module.exports = {
|
||||
id: 'pause',
|
||||
async execute(interaction) {
|
||||
let queue = useQueue(interaction.guild.id)
|
||||
queue.node.setPaused(!queue.node.isPaused())
|
||||
await interaction.reply({ content: 'Musique mise en pause !', ephemeral: true })
|
||||
setTimeout(async () => { await interaction.deleteReply() }, 20000)
|
||||
}
|
||||
}
|
||||
11
buttons/previous.js
Normal file
11
buttons/previous.js
Normal file
@@ -0,0 +1,11 @@
|
||||
const { useHistory } = require("discord-player")
|
||||
|
||||
module.exports = {
|
||||
id: 'previous',
|
||||
async execute(interaction) {
|
||||
let history = useHistory(interaction.guild.id)
|
||||
await history.previous()
|
||||
await interaction.reply({ content: 'Musique précédente jouée !', ephemeral: true })
|
||||
setTimeout(async () => { await interaction.deleteReply() }, 20000)
|
||||
}
|
||||
}
|
||||
11
buttons/resume.js
Normal file
11
buttons/resume.js
Normal file
@@ -0,0 +1,11 @@
|
||||
const { useQueue } = require("discord-player")
|
||||
|
||||
module.exports = {
|
||||
id: 'resume',
|
||||
async execute(interaction) {
|
||||
let queue = useQueue(interaction.guild.id)
|
||||
queue.node.setPaused(!queue.node.isPaused())
|
||||
await interaction.reply({ content: 'Musique reprise !', ephemeral: true })
|
||||
setTimeout(async () => { await interaction.deleteReply() }, 20000)
|
||||
}
|
||||
}
|
||||
11
buttons/shuffle.js
Normal file
11
buttons/shuffle.js
Normal file
@@ -0,0 +1,11 @@
|
||||
const { useQueue } = require("discord-player")
|
||||
|
||||
module.exports = {
|
||||
id: 'shuffle',
|
||||
async execute(interaction) {
|
||||
let queue = useQueue(interaction.guild.id)
|
||||
queue.tracks.shuffle()
|
||||
await interaction.reply({ content: 'File d\'attente mélangée !', ephemeral: true })
|
||||
setTimeout(async () => { await interaction.deleteReply() }, 20000)
|
||||
}
|
||||
}
|
||||
11
buttons/skip.js
Normal file
11
buttons/skip.js
Normal file
@@ -0,0 +1,11 @@
|
||||
const { useQueue } = require("discord-player")
|
||||
|
||||
module.exports = {
|
||||
id: 'skip',
|
||||
async execute(interaction) {
|
||||
let queue = useQueue(interaction.guild.id)
|
||||
queue.node.skip()
|
||||
await interaction.reply({ content: 'Musique passée !', ephemeral: true })
|
||||
setTimeout(async () => { await interaction.deleteReply() }, 20000)
|
||||
}
|
||||
}
|
||||
11
buttons/stop.js
Normal file
11
buttons/stop.js
Normal file
@@ -0,0 +1,11 @@
|
||||
const { useQueue } = require("discord-player")
|
||||
|
||||
module.exports = {
|
||||
id: 'stop',
|
||||
async execute(interaction) {
|
||||
let queue = useQueue(interaction.guild.id)
|
||||
queue.delete()
|
||||
await interaction.reply({ content: 'Musique arrêtée !', ephemeral: true })
|
||||
setTimeout(async () => { await interaction.deleteReply() }, 20000)
|
||||
}
|
||||
}
|
||||
12
buttons/volume_down.js
Normal file
12
buttons/volume_down.js
Normal file
@@ -0,0 +1,12 @@
|
||||
const { useQueue } = require("discord-player")
|
||||
|
||||
module.exports = {
|
||||
id: 'volume_down',
|
||||
async execute(interaction) {
|
||||
let queue = useQueue(interaction.guild.id)
|
||||
let volume = queue.node.volume - 10
|
||||
queue.node.setVolume(volume)
|
||||
await interaction.reply({ content: `🔉 | Volume modifié à ${volume}% !`, ephemeral: true })
|
||||
setTimeout(async () => { await interaction.deleteReply() }, 20000)
|
||||
}
|
||||
}
|
||||
15
buttons/volume_up.js
Normal file
15
buttons/volume_up.js
Normal file
@@ -0,0 +1,15 @@
|
||||
const { useQueue } = require("discord-player")
|
||||
|
||||
module.exports = {
|
||||
id: 'volume_up',
|
||||
async execute(interaction) {
|
||||
let queue = useQueue(interaction.guild.id)
|
||||
if (!queue) await interaction.reply({ content: "Aucune musique en cours de lecture.", ephemeral: true })
|
||||
else {
|
||||
let volume = queue.node.volume + 10
|
||||
queue.node.setVolume(volume)
|
||||
await interaction.reply({ content: `🔉 | Volume modifié à ${volume}% !`, ephemeral: true })
|
||||
}
|
||||
setTimeout(async () => { await interaction.deleteReply() }, 20000)
|
||||
}
|
||||
}
|
||||
94
commands/global/crack.js
Normal file
94
commands/global/crack.js
Normal file
@@ -0,0 +1,94 @@
|
||||
const { SlashCommandBuilder } = require('discord.js')
|
||||
const iconv = require('iconv-lite')
|
||||
const axios = require('axios')
|
||||
const fs = require('fs')
|
||||
|
||||
var headers1 = {
|
||||
"content-type": "application/x-www-form-urlencoded; charset=UTF-8",
|
||||
"x-requested-with": "XMLHttpRequest"
|
||||
}
|
||||
|
||||
var headers2 = {
|
||||
"accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7",
|
||||
"accept-language": "fr-FR,fr;q=0.9,en-US;q=0.8,en;q=0.7",
|
||||
"cache-control": "no-cache",
|
||||
"pragma": "no-cache",
|
||||
"sec-ch-ua": "\"Not=A?Brand\";v=\"8\", \"Chromium\";v=\"110\", \"Opera GX\";v=\"96\"",
|
||||
"sec-ch-ua-mobile": "?0",
|
||||
"sec-ch-ua-platform": "\"Windows\"",
|
||||
"sec-fetch-dest": "document",
|
||||
"sec-fetch-mode": "navigate",
|
||||
"sec-fetch-site": "none",
|
||||
"sec-fetch-user": "?1",
|
||||
"upgrade-insecure-requests": "1",
|
||||
"cookie": "online_fix_auth=gAAAAABkKM0s9WNLe_V6euTnJD7UQjppVty9B7OOyHBYOyVcbcejj8F6KveBcLxlf3mlx_vE7JEFPHlrpj-Aq6BFJyKPGzxds_wpcPV2MdXPyDGQLsz4mAvt3qgTgGg25MapWo_fSIOMiAAsF4Gv_uh4kUOiR_jgbHCZWJGPgpNQwU2HFFyvahYR6MzR7nYE9-fCmrev3obkRbro43vIVTTX4UyJMRHadrsY5Q-722TzinCZVmAuJfc=; dle_password=89465c26673e0199e5272e4730772c35; _ym_uid=1670534560361937997; _ym_d=1680394955; _ym_isad=2; dle_user_id=2619796; PHPSESSID=3v8sd281sr0n1n9f1p66q25sa2",
|
||||
"Referer": "https://online-fix.me/",
|
||||
"Referrer-Policy": "strict-origin-when-cross-origin"
|
||||
}
|
||||
|
||||
async function search(query, headers) {
|
||||
let body = await fetch("https://online-fix.me/engine/ajax/search.php", { headers, body: `query=${query}`, method: "POST" })
|
||||
.then(response => response.arrayBuffer())
|
||||
.then(arrayBuffer => { return iconv.decode(Buffer.from(arrayBuffer), 'win1251') })
|
||||
.catch(error => console.error(error))
|
||||
let matches = body.split('</div>')[1].split('<span class="seperator fastfullsearch">')[0].split('</a>')
|
||||
let games = []
|
||||
matches.pop()
|
||||
matches.forEach(async match => {
|
||||
let name = match.split('"><span class="searchheading">')[1].split('</span>')[0].slice(0, -8)
|
||||
let link = match.split('<a href="')[1].split('"><span class="searchheading">')[0]
|
||||
games.push({ name, link })
|
||||
})
|
||||
return games
|
||||
}
|
||||
|
||||
async function repo(game, headers) {
|
||||
let body = await fetch(game.link, { headers, body: null, method: "GET" })
|
||||
.then(response => response.arrayBuffer())
|
||||
.then(arrayBuffer => { return iconv.decode(Buffer.from(arrayBuffer), 'win1251') })
|
||||
.catch(error => console.error(error))
|
||||
let name = body.split('https://uploads.online-fix.me:2053/torrents/')[1].split('"')[0]
|
||||
let url = `https://uploads.online-fix.me:2053/torrents/${name}`
|
||||
return url
|
||||
}
|
||||
|
||||
async function torrent(url, headers) {
|
||||
let response = await fetch(url, { headers, body: null, method: "GET" })
|
||||
.catch(error => console.error(error))
|
||||
let body = await response.text()
|
||||
let file = body.split('<a href="')[2].split('">')[0]
|
||||
return file
|
||||
}
|
||||
|
||||
async function download(url, file, headers) {
|
||||
let path = `./cracks/${file}`
|
||||
let writer = fs.createWriteStream(path)
|
||||
await axios({ url: url + file, method: 'GET', responseType: 'stream', headers }).then(response => {
|
||||
return new Promise((resolve, reject) => {
|
||||
response.data.pipe(writer)
|
||||
let error = null
|
||||
writer.on('error', err => {
|
||||
error = err
|
||||
writer.close()
|
||||
reject(err)
|
||||
})
|
||||
writer.on('close', () => { if (!error) resolve(true) })
|
||||
})
|
||||
}).catch(error => console.error(error))
|
||||
return path
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
data: new SlashCommandBuilder() .setName('crack') .setDescription('Télécharge un crack sur le site online-fix.me !')
|
||||
.addStringOption(option => option.setName('jeu').setDescription('Quel jeu tu veux DL ?').setRequired(true)),
|
||||
async execute(interaction) {
|
||||
await interaction.deferReply()
|
||||
let query = interaction.options.getString('jeu')
|
||||
let games = await search(query, headers1)
|
||||
let url = await repo(games[0], headers2)
|
||||
let file = await torrent(url, headers2)
|
||||
let path = await download(url, file, headers2)
|
||||
await interaction.followUp({ content: `Voici ce que j'ai trouvé pour "${query}" !`, files: [path] })
|
||||
await fs.unlink(path, (err) => { if (err) throw err })
|
||||
}
|
||||
}
|
||||
11
commands/global/ping.js
Executable file
11
commands/global/ping.js
Executable file
@@ -0,0 +1,11 @@
|
||||
const { SlashCommandBuilder } = require('discord.js')
|
||||
|
||||
module.exports = {
|
||||
data: new SlashCommandBuilder()
|
||||
.setName('ping')
|
||||
.setDescription('Check the latency of the bot'),
|
||||
async execute(interaction) {
|
||||
let sent = await interaction.reply({ content: 'Pinging...', fetchReply: true })
|
||||
interaction.editReply(`Websocket heartbeat: ${interaction.client.ws.ping}ms.\nRoundtrip latency: ${sent.createdTimestamp - interaction.createdTimestamp}ms`)
|
||||
}
|
||||
}
|
||||
25
commands/global/spam.js
Executable file
25
commands/global/spam.js
Executable file
@@ -0,0 +1,25 @@
|
||||
const { SlashCommandBuilder } = require('discord.js')
|
||||
|
||||
module.exports = {
|
||||
data: new SlashCommandBuilder()
|
||||
.setName('spam')
|
||||
.setDescription('Spam')
|
||||
.addUserOption(option => option.setName('user').setDescription('Spam').setRequired(true))
|
||||
.addStringOption(option => option.setName('string').setDescription('Spam').setRequired(true))
|
||||
.addIntegerOption(option => option.setName('integer').setDescription('Spam').setRequired(true)),
|
||||
async execute(interaction) {
|
||||
let user = interaction.options.getUser('user')
|
||||
let string = interaction.options.getString('string')
|
||||
let integer = interaction.options.getInteger('integer')
|
||||
await interaction.reply({ content: 'Spam', ephemeral: true })
|
||||
let i = 0
|
||||
function myLoop() {
|
||||
setTimeout(function () {
|
||||
user.send(string).catch(error => console.error(error))
|
||||
i++
|
||||
if (i < integer) myLoop()
|
||||
}, 1000)
|
||||
}
|
||||
myLoop()
|
||||
}
|
||||
}
|
||||
17
commands/global/update.js
Executable file
17
commands/global/update.js
Executable file
@@ -0,0 +1,17 @@
|
||||
const { SlashCommandBuilder } = require('discord.js')
|
||||
|
||||
module.exports = {
|
||||
data: new SlashCommandBuilder()
|
||||
.setName('update')
|
||||
.setDescription('Update the member count channel.'),
|
||||
async execute(interaction) {
|
||||
let guild = interaction.guild
|
||||
guild.members.fetch().then(() => {
|
||||
var i = 0
|
||||
guild.members.cache.forEach(async member => { if (!member.user.bot) i++ })
|
||||
let channel = guild.channels.cache.get('1091140609139560508')
|
||||
channel.setName(`${i} Gens Posés`)
|
||||
interaction.reply(`${i} Gens Posés !`)
|
||||
}).catch(console.error)
|
||||
}
|
||||
}
|
||||
19
commands/music/loop.js
Executable file
19
commands/music/loop.js
Executable file
@@ -0,0 +1,19 @@
|
||||
const { SlashCommandBuilder } = require('discord.js')
|
||||
const { useQueue } = require("discord-player")
|
||||
|
||||
module.exports = {
|
||||
data: new SlashCommandBuilder()
|
||||
.setName('loop')
|
||||
.setDescription('Boucler la musique en cours de lecture.')
|
||||
.addIntegerOption(option => option.setName('loop')
|
||||
.setDescription("Mode de boucle (0 = Off, 1 = Titre, 2 = File d'Attente; 3 = Autoplay)")
|
||||
.setRequired(true)
|
||||
.setMinValue(0)
|
||||
.setMaxValue(3)),
|
||||
async execute(interaction) {
|
||||
let loop = interaction.options.getInteger('loop')
|
||||
let queue = useQueue(interaction.guild.id)
|
||||
queue.setRepeatMode(loop)
|
||||
return await interaction.reply(`Boucle ${loop === 0 ? "désactivée" : loop === 1 ? "en mode Titre" : loop === 2 ? "en mode File d'Attente" : "en autoplay"}.`)
|
||||
}
|
||||
}
|
||||
13
commands/music/pause.js
Executable file
13
commands/music/pause.js
Executable file
@@ -0,0 +1,13 @@
|
||||
const { SlashCommandBuilder } = require('discord.js')
|
||||
const { useQueue } = require("discord-player")
|
||||
|
||||
module.exports = {
|
||||
data: new SlashCommandBuilder()
|
||||
.setName('pause')
|
||||
.setDescription('Met en pause la musique.'),
|
||||
async execute(interaction) {
|
||||
let queue = useQueue(interaction.guild.id)
|
||||
queue.node.setPaused(!queue.node.isPaused())
|
||||
return await interaction.reply('Musique mise en pause !')
|
||||
}
|
||||
}
|
||||
81
commands/music/play.js
Executable file
81
commands/music/play.js
Executable file
@@ -0,0 +1,81 @@
|
||||
const { SlashCommandBuilder } = require('discord.js')
|
||||
const { useMasterPlayer, useQueue, QueryType } = require('discord-player')
|
||||
const reduceString = (str, length) => str.length > length ? str.substring(0, length - 3) + "..." : str
|
||||
|
||||
module.exports = {
|
||||
data: new SlashCommandBuilder()
|
||||
.setName('play')
|
||||
.setDescription('Jouer une musique.')
|
||||
.addStringOption(option => option.setName('recherche').setDescription('Titre de la musique à chercher').setRequired(true).setAutocomplete(true)),
|
||||
async autocompleteRun(interaction) {
|
||||
let query = interaction.options.getString('recherche', true)
|
||||
if (!query) return interaction.respond([])
|
||||
|
||||
let player = useMasterPlayer()
|
||||
|
||||
const resultsYouTube = await player.search(query, { searchEngine: QueryType.YOUTUBE })
|
||||
const resultsSpotify = await player.search(query, { searchEngine: QueryType.SPOTIFY_SEARCH })
|
||||
|
||||
const tracksYouTube = resultsYouTube.tracks.slice(0, 5).map((t) => ({
|
||||
name: `YouTube: ${`${t.title} - ${t.author} (${t.duration})`.length > 75 ? `${`${t.title} - ${t.author}`.substring(0, 75)}... (${t.duration})` : `${t.title} - ${t.author} (${t.duration})`}`,
|
||||
value: t.url
|
||||
}))
|
||||
const tracksSpotify = resultsSpotify.tracks.slice(0, 5).map((t) => ({
|
||||
name: `Spotify: ${`${t.title} - ${t.author} (${t.duration})`.length > 75 ? `${`${t.title} - ${t.author}`.substring(0, 75)}... (${t.duration})` : `${t.title} - ${t.author} (${t.duration})`}`,
|
||||
value: t.url
|
||||
}))
|
||||
|
||||
const tracks = []
|
||||
tracksYouTube.forEach((t) => tracks.push({ name: t.name, value: t.value }));
|
||||
tracksSpotify.forEach((t) => tracks.push({ name: t.name, value: t.value }));
|
||||
|
||||
return interaction.respond(tracks)
|
||||
},
|
||||
async execute(interaction) {
|
||||
let voiceChannel = interaction.member.voice.channel
|
||||
if (!voiceChannel) return await interaction.reply({ content: "T'es pas dans un vocal, idiot !", ephemeral: true })
|
||||
|
||||
let botChannel = interaction.guild.members.me.voice.channel
|
||||
if (botChannel && voiceChannel.id !== botChannel.id) return await interaction.reply({ content: "T'es pas dans mon vocal !", ephemeral: true })
|
||||
|
||||
await interaction.deferReply()
|
||||
|
||||
let query = interaction.options.getString('recherche', true)
|
||||
let player = useMasterPlayer()
|
||||
let queue = useQueue(interaction.guild.id)
|
||||
|
||||
if (!queue) {
|
||||
queue = player.nodes.create(interaction.guild, {
|
||||
metadata: {
|
||||
channel: interaction.channel,
|
||||
client: interaction.guild.members.me,
|
||||
requestedBy: interaction.user
|
||||
},
|
||||
selfDeaf: true,
|
||||
volume: 20,
|
||||
leaveOnEmpty: true,
|
||||
leaveOnEmptyCooldown: 300000,
|
||||
leaveOnEnd: true,
|
||||
leaveOnEndCooldown: 300000,
|
||||
skipOnNoStream: true
|
||||
})
|
||||
}
|
||||
try { if (!queue.connection) await queue.connect(voiceChannel) }
|
||||
catch (error) { console.error(error); return await interaction.followUp(`Y'a eu un problème, <@223831938346123275> ! (${error.message})`) }
|
||||
|
||||
let result = await player.search(query, { requestedBy: interaction.user })
|
||||
if (!result.hasTracks()) return await interaction.followUp(`Aucune musique trouvée pour **${query}** !`)
|
||||
let track = result.tracks[0]
|
||||
|
||||
let entry = queue.tasksQueue.acquire()
|
||||
await entry.getTask()
|
||||
queue.addTrack(track)
|
||||
|
||||
try {
|
||||
if (!queue.isPlaying()) await queue.node.play()
|
||||
track.source = track.source === 'youtube' ? 'Youtube' : track.source === 'spotify' ? 'Spotify' : 'Inconnu'
|
||||
return await interaction.followUp(`Chargement de la musique **${track.title}** de **${track.author}** sur **${track.source}**...`)
|
||||
} catch (error) { console.error(error); return await interaction.followUp(`Y'a eu un problème, <@223831938346123275> ! (${error.message})`) }
|
||||
finally { queue.tasksQueue.release() }
|
||||
}
|
||||
}
|
||||
49
commands/music/player.js
Executable file
49
commands/music/player.js
Executable file
@@ -0,0 +1,49 @@
|
||||
const { SlashCommandBuilder, EmbedBuilder } = require('discord.js')
|
||||
const { useQueue } = require("discord-player")
|
||||
|
||||
module.exports = {
|
||||
data: new SlashCommandBuilder()
|
||||
.setName('player')
|
||||
.setDescription('Afficher une interface de contrôle de la musique.'),
|
||||
async execute(interaction) {
|
||||
let queue = useQueue(interaction.guild.id)
|
||||
if (!queue) return await interaction.reply('Aucune session d\'écoute en cours !')
|
||||
let track = queue.currentTrack
|
||||
if (!track) return await interaction.reply('Aucune musique en cours de lecture !')
|
||||
|
||||
/*let embed = {
|
||||
color: 0xffc370,
|
||||
title: track.title,
|
||||
url: track.url,
|
||||
}
|
||||
if (track.thumbnail) embed.thumbnail = { url: track.thumbnail }
|
||||
embed.description = `
|
||||
**Durée :** ${track.duration}
|
||||
**Source :** ${track.source ? track.source === 'youtube' ? 'Youtube' : track.source === 'spotify' ? 'Spotify' : 'Inconnu' : 'Inconnu'}
|
||||
**Volume :** ${queue.node.volume}%
|
||||
**Progression :** ${queue.node.createProgressBar()}
|
||||
**Loop :** ${queue.repeatMode ? queue.repeatMode === 2 ? "File d'Attente" : "Titre" : "Off"}
|
||||
**Autoplay :** ${queue.autoplay ? "On" : "Off"}
|
||||
`
|
||||
if (track.requestedBy) embed.footer = { text: `Demandé par ${track.requestedBy.tag}` }
|
||||
return await interaction.reply({ embeds: [embed] })*/
|
||||
|
||||
// Create an embed using EmbedBuilder instead of an object
|
||||
const embed = new EmbedBuilder()
|
||||
.setColor('#ffc370')
|
||||
.setTitle(track.title)
|
||||
.setAuthor({ name: track.author })
|
||||
.setURL(track.url)
|
||||
.setThumbnail(track.thumbnail)
|
||||
.setDescription(`
|
||||
**Durée :** ${track.duration}
|
||||
**Source :** ${track.source ? track.source === 'youtube' ? 'Youtube' : track.source === 'spotify' ? 'Spotify' : 'Inconnu' : 'Inconnu'}
|
||||
**Volume :** ${queue.node.volume}%
|
||||
**Progression :** ${queue.node.createProgressBar()}
|
||||
**Loop :** ${queue.repeatMode ? queue.repeatMode === 2 ? "File d'Attente" : "Titre" : "Off"}
|
||||
**Autoplay :** ${queue.autoplay ? "On" : "Off"}
|
||||
`)
|
||||
.setFooter({ text: `Demandé par ${track.requestedBy.tag}` })
|
||||
return await interaction.reply({ embeds: [embed] })
|
||||
}
|
||||
}
|
||||
13
commands/music/previous.js
Executable file
13
commands/music/previous.js
Executable file
@@ -0,0 +1,13 @@
|
||||
const { SlashCommandBuilder } = require('discord.js')
|
||||
const { useHistory } = require("discord-player")
|
||||
|
||||
module.exports = {
|
||||
data: new SlashCommandBuilder()
|
||||
.setName('previous')
|
||||
.setDescription('Joue la musique précédente.'),
|
||||
async execute(interaction) {
|
||||
let history = useHistory(interaction.guild.id)
|
||||
await history.previous()
|
||||
return await interaction.reply('Musique précédente jouée !')
|
||||
}
|
||||
}
|
||||
13
commands/music/resume.js
Executable file
13
commands/music/resume.js
Executable file
@@ -0,0 +1,13 @@
|
||||
const { SlashCommandBuilder } = require('discord.js')
|
||||
const { useQueue } = require("discord-player")
|
||||
|
||||
module.exports = {
|
||||
data: new SlashCommandBuilder()
|
||||
.setName('resume')
|
||||
.setDescription('Reprendre la musique.'),
|
||||
async execute(interaction) {
|
||||
let queue = useQueue(interaction.guild.id)
|
||||
queue.node.setPaused(!queue.node.isPaused())
|
||||
return await interaction.reply('Musique reprise !')
|
||||
}
|
||||
}
|
||||
13
commands/music/shuffle.js
Executable file
13
commands/music/shuffle.js
Executable file
@@ -0,0 +1,13 @@
|
||||
const { SlashCommandBuilder } = require('discord.js')
|
||||
const { useQueue } = require("discord-player")
|
||||
|
||||
module.exports = {
|
||||
data: new SlashCommandBuilder()
|
||||
.setName('shuffle')
|
||||
.setDescription('Mélange la file d\'attente.'),
|
||||
async execute(interaction) {
|
||||
let queue = useQueue(interaction.guild.id)
|
||||
queue.tracks.shuffle()
|
||||
return await interaction.reply('File d\'attente mélangée !')
|
||||
}
|
||||
}
|
||||
13
commands/music/skip.js
Executable file
13
commands/music/skip.js
Executable file
@@ -0,0 +1,13 @@
|
||||
const { SlashCommandBuilder } = require('discord.js')
|
||||
const { useQueue } = require("discord-player")
|
||||
|
||||
module.exports = {
|
||||
data: new SlashCommandBuilder()
|
||||
.setName('skip')
|
||||
.setDescription('Passer la musique en cours.'),
|
||||
async execute(interaction) {
|
||||
let queue = useQueue(interaction.guild.id)
|
||||
queue.node.skip()
|
||||
return await interaction.reply('Musique passée !')
|
||||
}
|
||||
}
|
||||
13
commands/music/stop.js
Executable file
13
commands/music/stop.js
Executable file
@@ -0,0 +1,13 @@
|
||||
const { SlashCommandBuilder } = require('discord.js')
|
||||
const { useQueue } = require("discord-player")
|
||||
|
||||
module.exports = {
|
||||
data: new SlashCommandBuilder()
|
||||
.setName('stop')
|
||||
.setDescription('Arrêter la musique.'),
|
||||
async execute(interaction) {
|
||||
let queue = useQueue(interaction.guild.id)
|
||||
queue.delete()
|
||||
return await interaction.reply('Musique arrêtée !')
|
||||
}
|
||||
}
|
||||
19
commands/music/volume.js
Executable file
19
commands/music/volume.js
Executable file
@@ -0,0 +1,19 @@
|
||||
const { SlashCommandBuilder } = require('discord.js')
|
||||
const { useQueue } = require("discord-player")
|
||||
|
||||
module.exports = {
|
||||
data: new SlashCommandBuilder()
|
||||
.setName('volume')
|
||||
.setDescription('Modifie le volume de la musique.')
|
||||
.addIntegerOption(option => option.setName('volume')
|
||||
.setDescription('Le volume à mettre (%)')
|
||||
.setRequired(true)
|
||||
.setMinValue(1)
|
||||
.setMaxValue(100)),
|
||||
async execute(interaction) {
|
||||
let volume = interaction.options.getInteger('volume')
|
||||
let queue = useQueue(interaction.guild.id)
|
||||
queue.node.setVolume(volume)
|
||||
return await interaction.reply(`Volume modifié à ${volume}% !`)
|
||||
}
|
||||
}
|
||||
16
events/guildMemberAdd.js
Executable file
16
events/guildMemberAdd.js
Executable file
@@ -0,0 +1,16 @@
|
||||
const { Events } = require('discord.js')
|
||||
|
||||
module.exports = {
|
||||
name: Events.GuildMemberAdd,
|
||||
async execute(member) {
|
||||
member.guild.members.fetch().then(() => {
|
||||
var i = 0
|
||||
member.guild.members.cache.forEach(async member => { if (!member.user.bot) i++ })
|
||||
let channel = member.guild.channels.cache.get('1091140609139560508')
|
||||
console.log(channel.name)
|
||||
console.log(`${i} Gens Posés`)
|
||||
channel.setName('Changement...')
|
||||
channel.setName(`${i} Gens Posés`)
|
||||
}).catch(console.error)
|
||||
}
|
||||
}
|
||||
16
events/guildMemberRemove.js
Executable file
16
events/guildMemberRemove.js
Executable file
@@ -0,0 +1,16 @@
|
||||
const { Events } = require('discord.js')
|
||||
|
||||
module.exports = {
|
||||
name: Events.GuildMemberRemove,
|
||||
async execute(member) {
|
||||
member.guild.members.fetch().then(() => {
|
||||
var i = 0
|
||||
member.guild.members.cache.forEach(async member => { if (!member.user.bot) i++ })
|
||||
let channel = member.guild.channels.cache.get('1091140609139560508')
|
||||
console.log(channel.name)
|
||||
console.log(`${i} Gens Posés`)
|
||||
channel.setName('Changement...')
|
||||
channel.setName(`${i} Gens Posés`)
|
||||
}).catch(console.error)
|
||||
}
|
||||
}
|
||||
34
events/interactionCreate.js
Executable file
34
events/interactionCreate.js
Executable file
@@ -0,0 +1,34 @@
|
||||
const { Events } = require('discord.js')
|
||||
|
||||
module.exports = {
|
||||
name: Events.InteractionCreate,
|
||||
async execute(interaction) {
|
||||
if (interaction.isButton()) {
|
||||
let button = interaction.client.buttons.get(interaction.customId)
|
||||
if (!button) return console.error(`No button id matching ${interaction.customId} was found.`)
|
||||
|
||||
console.log(`\u001b[1;33m Button '${interaction.customId}' clicked by ${interaction.user.tag}`)
|
||||
|
||||
try { await button.execute(interaction) }
|
||||
catch (error) { console.error(`Error executing ${interaction.customId}:`, error) }
|
||||
}
|
||||
|
||||
if (!interaction.isAutocomplete() && !interaction.isChatInputCommand()) return //console.error(`Interaction ${interaction.commandName} is not a command.`)
|
||||
|
||||
let command = interaction.client.commands.get(interaction.commandName)
|
||||
if (!command) return console.error(`No command matching ${interaction.commandName} was found.`)
|
||||
|
||||
if (interaction.isAutocomplete()) {
|
||||
console.log(`\u001b[1;33m AutoCompleteRun '${interaction.commandName}' launched by ${interaction.user.tag}`)
|
||||
|
||||
try { await command.autocompleteRun(interaction) }
|
||||
catch (error) { console.error(`Error autocompleting ${interaction.commandName}:`, error) }
|
||||
}
|
||||
else if (interaction.isChatInputCommand()) {
|
||||
console.log(`\u001b[1;33m Command '${interaction.commandName}' launched by ${interaction.user.tag}`)
|
||||
|
||||
try { await command.execute(interaction) }
|
||||
catch (error) { console.error(`Error executing ${interaction.commandName}:`, error) }
|
||||
}
|
||||
}
|
||||
}
|
||||
99
events/ready.js
Executable file
99
events/ready.js
Executable file
@@ -0,0 +1,99 @@
|
||||
const { Events, EmbedBuilder, ButtonBuilder, ActionRowBuilder } = require('discord.js')
|
||||
const { useQueue } = require("discord-player")
|
||||
|
||||
const dance = async function (bot_id, channel, embed, components) {
|
||||
let messages = await channel.messages.fetch()
|
||||
let botMessage = messages.find(msg => msg.author.id === bot_id)
|
||||
if (!botMessage || (!components && botMessage.components.length > 0)) {
|
||||
await channel.bulkDelete(messages)
|
||||
return await channel.send({ embeds: [embed] })
|
||||
} else {
|
||||
await botMessage.edit({ embeds: [embed], components })
|
||||
}
|
||||
}
|
||||
|
||||
const getUptime = function (uptime) {
|
||||
let days = Math.floor(uptime / 86400000)
|
||||
let hours = Math.floor(uptime / 3600000) % 24
|
||||
let minutes = Math.floor(uptime / 60000) % 60
|
||||
let seconds = Math.floor(uptime / 1000) % 60
|
||||
return `${days}J, ${hours}H, ${minutes}M et ${seconds}S`
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
name: Events.ClientReady,
|
||||
once: true,
|
||||
execute(client) {
|
||||
console.log(`\u001b[1;35m Ready! Logged in as ${client.user.tag}`)
|
||||
setInterval(async () => {
|
||||
let guild = client.guilds.cache.get('1086577543651524699')
|
||||
let channel = guild.channels.cache.get('1099542278764245096')
|
||||
|
||||
let queue = useQueue(guild.id)
|
||||
if (!queue) return await dance(client.user.id, channel, new EmbedBuilder().setColor('#ffc370').setTitle('Aucune session d\'écoute en cours !').setFooter({ text: `Uptime: ${getUptime(client.uptime)}` }))
|
||||
let track = queue.currentTrack
|
||||
if (!track) return await dance(client.user.id, channel, new EmbedBuilder().setColor('#ffc370').setTitle('Aucune musique en cours de lecture !').setFooter({ text: `Uptime: ${getUptime(client.uptime)}` }))
|
||||
|
||||
let embed = new EmbedBuilder()
|
||||
.setColor('#ffc370')
|
||||
.setTitle(track.title)
|
||||
.setAuthor({ name: track.author })
|
||||
.setURL(track.url)
|
||||
.setImage(track.thumbnail)
|
||||
.addFields(
|
||||
{ name: 'Durée', value: track.duration, inline: true },
|
||||
{ name: 'Source', value: track.source === 'youtube' ? 'Youtube' : track.source === 'spotify' ? 'Spotify' : 'Inconnu', inline: true },
|
||||
{ name: 'Volume', value: `${queue.node.volume}%`, inline: true },
|
||||
{ name: queue.node.isPaused() ? 'Progression (en pause)' : 'Progression', value: queue.node.createProgressBar() },
|
||||
{ name: 'Loop', value: queue.repeatMode ? queue.repeatMode === 2 ? "File d'Attente" : "Titre" : "Off", inline: true },
|
||||
{ name: 'Autoplay', value: queue.autoplay ? "On" : "Off", inline: true }
|
||||
)
|
||||
.setDescription(`**Musique suivante :** ${queue.tracks[0] ? queue.tracks[0].title : 'Aucune'}`)
|
||||
.setFooter({ text: `Uptime: ${getUptime(client.uptime)} / Demandé par ${track.requestedBy.tag}` })
|
||||
|
||||
let components = [
|
||||
new ActionRowBuilder().addComponents(
|
||||
new ButtonBuilder()
|
||||
.setLabel(queue.node.isPaused() ? '▶️' : '⏸️')
|
||||
.setStyle(2)
|
||||
.setCustomId(queue.node.isPaused() ? 'resume' : 'pause'),
|
||||
new ButtonBuilder()
|
||||
.setLabel('⏹️')
|
||||
.setStyle(2)
|
||||
.setCustomId('stop'),
|
||||
new ButtonBuilder()
|
||||
.setLabel('⏭️')
|
||||
.setStyle(2)
|
||||
.setCustomId('skip')
|
||||
.setDisabled(queue.tracks.length !== 0),
|
||||
new ButtonBuilder()
|
||||
.setLabel('🔉')
|
||||
.setStyle(2)
|
||||
.setCustomId('volume_down')
|
||||
.setDisabled(queue.node.volume === 0),
|
||||
new ButtonBuilder()
|
||||
.setLabel('🔊')
|
||||
.setStyle(2)
|
||||
.setCustomId('volume_up')
|
||||
.setDisabled(queue.node.volume === 100)
|
||||
),
|
||||
new ActionRowBuilder().addComponents(
|
||||
new ButtonBuilder()
|
||||
.setLabel('🔀')
|
||||
.setStyle(2)
|
||||
.setCustomId('shuffle'),
|
||||
new ButtonBuilder()
|
||||
.setLabel('🔁')
|
||||
.setStyle(2)
|
||||
.setCustomId('loop'),
|
||||
new ButtonBuilder()
|
||||
.setLabel('⏮️')
|
||||
.setStyle(2)
|
||||
.setCustomId('previous')
|
||||
.setDisabled(queue.previousTracks ? !queue.previousTracks[0] : true)
|
||||
)
|
||||
]
|
||||
await dance(client.user.id, channel, embed, components)
|
||||
}, 4000)
|
||||
}
|
||||
}
|
||||
59
events/voiceStateUpdate.js
Executable file
59
events/voiceStateUpdate.js
Executable file
@@ -0,0 +1,59 @@
|
||||
const { Events, AuditLogEvent } = require('discord.js')
|
||||
|
||||
module.exports = {
|
||||
name: Events.VoiceStateUpdate,
|
||||
async execute(oldState, newState) {
|
||||
/*
|
||||
let oldMute = oldState.serverMute
|
||||
let newMute = newState.serverMute
|
||||
let oldDeaf = oldState.serverDeaf
|
||||
let newDeaf = newState.serverDeaf
|
||||
let oldChannel = oldState.channelId
|
||||
let newChannel = newState.channelId
|
||||
console.log(oldChannel)
|
||||
console.log(newChannel)
|
||||
let guild = newState.guild
|
||||
let member = newState.member
|
||||
let channel = guild.channels.cache.get('1076215868863819848')
|
||||
let angels = guild.members.cache.get('223831938346123275')
|
||||
if (oldChannel !== newChannel) {
|
||||
let executor = await logMoveOrKick('channel_id')
|
||||
//if (!executor) channel.send(`Impossible de savoir qui a déplacé <@${member.id}> !`)
|
||||
//else if (member.id === executor.id) channel.send(`<@${member.id}> s'est déplacé lui-même le con...`)
|
||||
//else {
|
||||
// channel.send(`<@${member.id}> a été mis en sourdine par <@${executor.id}> !`)
|
||||
//}
|
||||
} else if (!oldMute && newMute) {
|
||||
let executor = await logMuteOrDeaf('mute')
|
||||
if (!executor) channel.send(`Impossible de savoir qui a muté <@${member.id}> !`)
|
||||
else if (member.id === executor.id) channel.send(`<@${member.id}> s'est muté lui-même le con...`)
|
||||
else {
|
||||
channel.send(`<@${member.id}> a été muté par <@${executor.id}> !`)
|
||||
}
|
||||
} else if (!oldDeaf && newDeaf) {
|
||||
let executor = await logMuteOrDeaf('deaf')
|
||||
if (!executor) channel.send(`Impossible de savoir qui a mis en sourdine <@${member.id}> !`)
|
||||
else if (member.id === executor.id) channel.send(`<@${member.id}> s'est mis en sourdine lui-même le con...`)
|
||||
else {
|
||||
channel.send(`<@${member.id}> a été mis en sourdine par <@${executor.id}> !`)
|
||||
}
|
||||
}
|
||||
async function logMoveOrKick() {
|
||||
let auditLogs = await guild.fetchAuditLogs({ limit: 1, type: AuditLogEvent.MemberMove })
|
||||
console.log(auditLogs.entries.find(entry => { return entry }))
|
||||
let log = await auditLogs.entries.find(entry => { return entry.extra.channel.id === newChannel })
|
||||
console.log(log)
|
||||
if (!log) return undefined
|
||||
let executor = await guild.members.cache.get(log.executor.id)
|
||||
return executor
|
||||
}
|
||||
async function logMuteOrDeaf(type) {
|
||||
let auditLogs = await guild.fetchAuditLogs({ limit: 1, type: AuditLogEvent.MemberUpdate })
|
||||
let log = await auditLogs.entries.find(entry => { return entry.target.id === member.id && entry.changes[0].key === type && entry.changes[0].new === true })
|
||||
if (!log) return undefined
|
||||
let executor = await guild.members.cache.get(log.executor.id)
|
||||
return executor
|
||||
}
|
||||
*/
|
||||
}
|
||||
}
|
||||
7
eventsPlayer/audioTrackAdd.js
Normal file
7
eventsPlayer/audioTrackAdd.js
Normal file
@@ -0,0 +1,7 @@
|
||||
module.exports = {
|
||||
name: 'audioTrackAdd',
|
||||
async execute(queue, track) {
|
||||
// Emitted when the player adds a single song to its queue
|
||||
queue.metadata.channel.send(`Musique **${track.title}** de **${track.author}** ajoutée à la file d'attente !`)
|
||||
}
|
||||
}
|
||||
7
eventsPlayer/audioTracksAdd.js
Normal file
7
eventsPlayer/audioTracksAdd.js
Normal file
@@ -0,0 +1,7 @@
|
||||
module.exports = {
|
||||
name: 'audioTracksAdd',
|
||||
async execute(queue, track) {
|
||||
// Emitted when the player adds multiple songs to its queue
|
||||
queue.metadata.channel.send(`Ajout de ${track.length} musiques à la file d'attente !`)
|
||||
}
|
||||
}
|
||||
8
eventsPlayer/debug.js
Normal file
8
eventsPlayer/debug.js
Normal file
@@ -0,0 +1,8 @@
|
||||
module.exports = {
|
||||
name: 'debug',
|
||||
async execute (queue, message) {
|
||||
// Emitted when the player queue sends debug info
|
||||
// Useful for seeing what state the current queue is at
|
||||
console.log(`Player debug event: ${message}`)
|
||||
}
|
||||
}
|
||||
7
eventsPlayer/disconnect.js
Normal file
7
eventsPlayer/disconnect.js
Normal file
@@ -0,0 +1,7 @@
|
||||
module.exports = {
|
||||
name: 'disconnect',
|
||||
async execute(queue, track) {
|
||||
// Emitted when the bot leaves the voice channel
|
||||
queue.metadata.channel.send("J'ai quitté le vocal !")
|
||||
}
|
||||
}
|
||||
8
eventsPlayer/emptyChannel.js
Normal file
8
eventsPlayer/emptyChannel.js
Normal file
@@ -0,0 +1,8 @@
|
||||
module.exports = {
|
||||
name: 'emptyChannel',
|
||||
async execute(queue, track) {
|
||||
// Emitted when the voice channel has been empty for the set threshold
|
||||
// Bot will automatically leave the voice channel with this event
|
||||
queue.metadata.channel.send(`Je quitte le vocal car il est vide depuis trop longtemps.`)
|
||||
}
|
||||
}
|
||||
7
eventsPlayer/emptyQueue.js
Normal file
7
eventsPlayer/emptyQueue.js
Normal file
@@ -0,0 +1,7 @@
|
||||
module.exports = {
|
||||
name: 'emptyQueue',
|
||||
async execute(queue, track) {
|
||||
// Emitted when the player queue has finished
|
||||
queue.metadata.channel.send("File d'attente vide !")
|
||||
}
|
||||
}
|
||||
8
eventsPlayer/error.js
Normal file
8
eventsPlayer/error.js
Normal file
@@ -0,0 +1,8 @@
|
||||
module.exports = {
|
||||
name: 'error',
|
||||
async execute(queue, error) {
|
||||
// Emitted when the player queue encounters error
|
||||
console.log(`\u001b[1;31m General player error event: ${error.message}`)
|
||||
console.error(error)
|
||||
}
|
||||
}
|
||||
8
eventsPlayer/playerError.js
Normal file
8
eventsPlayer/playerError.js
Normal file
@@ -0,0 +1,8 @@
|
||||
module.exports = {
|
||||
name: 'playerError',
|
||||
async execute(queue, error) {
|
||||
// Emitted when the audio player errors while streaming audio track
|
||||
console.log(`\u001b[1;31m Player error event: ${error.message}`)
|
||||
console.error(error)
|
||||
}
|
||||
}
|
||||
7
eventsPlayer/playerSkip.js
Normal file
7
eventsPlayer/playerSkip.js
Normal file
@@ -0,0 +1,7 @@
|
||||
module.exports = {
|
||||
name: 'playerSkip',
|
||||
async execute(queue, track) {
|
||||
// Emitted when the audio player fails to load the stream for a song
|
||||
queue.metadata.channel.send(`Musique **${track.title}** de **${track.author}** passée !`)
|
||||
}
|
||||
}
|
||||
7
eventsPlayer/playerStart.js
Normal file
7
eventsPlayer/playerStart.js
Normal file
@@ -0,0 +1,7 @@
|
||||
module.exports = {
|
||||
name: 'playerStart',
|
||||
async execute(queue, track) {
|
||||
// Emitted when the player starts to play a song
|
||||
queue.metadata.channel.send(`Lecture de **${track.title}** de **${track.author}** !`)
|
||||
}
|
||||
}
|
||||
5532
package-lock.json
generated
Normal file
5532
package-lock.json
generated
Normal file
File diff suppressed because it is too large
Load Diff
38
package.json
Executable file
38
package.json
Executable file
@@ -0,0 +1,38 @@
|
||||
{
|
||||
"name": "tamiseur",
|
||||
"version": "1.0.0",
|
||||
"description": "Tamiseur",
|
||||
"main": "app.js",
|
||||
"scripts": {
|
||||
"format": "prettier --write .",
|
||||
"start": "node app.js",
|
||||
"dev": "nodemon -e js"
|
||||
},
|
||||
"author": {
|
||||
"name": "Zachary Guénot"
|
||||
},
|
||||
"devDependencies": {
|
||||
"eslint": "^8.39.0",
|
||||
"nodemon": "^2.0.22",
|
||||
"prettier": "^2.8.7"
|
||||
},
|
||||
"eslintConfig": {},
|
||||
"dependencies": {
|
||||
"@discord-player/equalizer": "^0.2.1",
|
||||
"@discord-player/extractor": "^4.2.1",
|
||||
"@discordjs/opus": "^0.9.0",
|
||||
"@discordjs/voice": "^0.16.0",
|
||||
"axios": "^1.3.6",
|
||||
"bufferutil": "^4.0.7",
|
||||
"discord-player": "^6.2.1",
|
||||
"discord.js": "^14.9.0",
|
||||
"dotenv": "^16.0.3",
|
||||
"iconv-lite": "^0.6.3",
|
||||
"libsodium-wrappers": "^0.7.11",
|
||||
"npm": "^9.6.5",
|
||||
"opusscript": "^0.0.8",
|
||||
"play-dl": "^1.9.6",
|
||||
"utf-8-validate": "^6.0.3",
|
||||
"zlib-sync": "^0.1.8"
|
||||
}
|
||||
}
|
||||
BIN
stronger_shorter.mp3
Executable file
BIN
stronger_shorter.mp3
Executable file
Binary file not shown.
Reference in New Issue
Block a user