mirror of
				https://github.com/jarulsamy/Plex-Bot.git
				synced 2024-08-19 15:01:55 +02:00 
			
		
		
		
	Compare commits
	
		
			80 Commits
		
	
	
		
			v0.0.1
			...
			360416bb02
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|  | 360416bb02 | ||
|  | ccee843a36 | ||
|  | 90c40fb0d6 | ||
|  | 8b90fb8e34 | ||
|  | 60ef54d8e4 | ||
|  | 280cbaed92 | ||
|  | 2f17494ebd | ||
|  | ed9e677108 | ||
|  | aa51cc4301 | ||
|  | 069d88fd1e | ||
|  | 15b7e0f50e | ||
|  | 04da5dfd42 | ||
|  | 19360e3101 | ||
|  | 52099fa794 | ||
|  | 139ce07d24 | ||
|  | 5f9c83b75e | ||
|  | f8e5af87b6 | ||
|  | a45ccb657e | ||
|  | bcbce98d91 | ||
|  | 6521e7e26c | ||
|  | add1a1af0d | ||
|  | 8f05f5e27f | ||
|  | eeb430c016 | ||
|  | 1ffa5a7229 | ||
|  | f4cd675502 | ||
|  | 921dfc02b8 | ||
|  | 9fb091e9e1 | ||
|  | efdd604d65 | ||
|  | 7d6060ed15 | ||
|  | d6f5174d20 | ||
|  | 151f650bb2 | ||
|  | 5eceab7a22 | ||
|  | 545654f9a7 | ||
|  | 57490cdf17 | ||
|  | a6be6eac37 | ||
|  | 5ba7d751d0 | ||
|  | d0b6c25359 | ||
|  | db188d968b | ||
|  | b05dd0598b | ||
|  | fc4682c210 | ||
|  | 228c2b480b | ||
|  | 08a235d55e | ||
|  | 880c4d50f1 | ||
|  | f12701f4c5 | ||
|  | f95d5c1fd2 | ||
|  | 56fd4aa5ab | ||
|  | 5f90b17b0e | ||
|  | cf2bc24f8a | ||
|  | 1839cc5d03 | ||
|  | e6c4b84538 | ||
|  | c1cba637b8 | ||
|  | 7f49c4d958 | ||
|  | ed1a64cb52 | ||
|  | 7471da85f7 | ||
|  | 4633247004 | ||
|  | 98a36c6cbc | ||
|  | b7ab589f6e | ||
|  | 4aadd886d5 | ||
|  | 3e90c9e9ef | ||
|  | 33bbf21bab | ||
|  | 253f2a9a82 | ||
|  | af91883635 | ||
|  | cfd89ea6e8 | ||
|  | 9cbd0be424 | ||
|  | 1a8ec5f21f | ||
|  | d0aacc3f0b | ||
|  | 9078ef616a | ||
|  | 72935d8c7c | ||
|  | 76d2d97c62 | ||
|  | 63fea747c6 | ||
|  | d48188870e | ||
|  | 64a09def50 | ||
|  | 786a7d3742 | ||
|  | 5c45500450 | ||
|  | 2d633acc67 | ||
|  | 257ea91c4c | ||
|  | 21c6bcc746 | ||
|  | 7a8cd631a5 | ||
|  | 81e0b50620 | ||
|  | 9f9ba0f5e5 | 
							
								
								
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							| @@ -1,6 +1,7 @@ | |||||||
| # Project specific | # Project specific | ||||||
| config.yaml | config.yaml | ||||||
| config/ | config/ | ||||||
|  | deploy.sh | ||||||
|  |  | ||||||
| # Byte-compiled / optimized / DLL files | # Byte-compiled / optimized / DLL files | ||||||
| __pycache__/ | __pycache__/ | ||||||
|   | |||||||
							
								
								
									
										19
									
								
								Dockerfile
									
									
									
									
									
								
							
							
						
						
									
										19
									
								
								Dockerfile
									
									
									
									
									
								
							| @@ -1,11 +1,13 @@ | |||||||
| # Python 3.7 | FROM python:3.7-slim | ||||||
| FROM python:3.7 |  | ||||||
|  | LABEL maintainer="Joshua Arulsamy <joshua.gf.arul@gmail.com>" | ||||||
|  |  | ||||||
| # Update system |  | ||||||
| RUN apt-get -y update |  | ||||||
| RUN apt-get -y upgrade |  | ||||||
| # Install ffmpeg | # Install ffmpeg | ||||||
| RUN apt-get install -y ffmpeg | RUN apt-get -y update && \ | ||||||
|  |     apt-get install -y --no-install-recommends ffmpeg=7:4.1.6-1~deb10u1 && \ | ||||||
|  |     apt-get autoremove -y && \ | ||||||
|  |     apt-get clean && \ | ||||||
|  |     rm -rf /var/lib/apt/lists/* | ||||||
|  |  | ||||||
| # All source code | # All source code | ||||||
| WORKDIR /src | WORKDIR /src | ||||||
| @@ -14,11 +16,10 @@ WORKDIR /src | |||||||
| COPY requirements.txt . | COPY requirements.txt . | ||||||
|  |  | ||||||
| # Install all dependencies. | # Install all dependencies. | ||||||
| RUN pip install -r requirements.txt | RUN pip install --no-cache-dir -r requirements.txt | ||||||
|  |  | ||||||
| # Copy PlexBot over to src. | # Copy PlexBot over to src. | ||||||
| COPY PlexBot/ PlexBot | COPY PlexBot/ PlexBot | ||||||
|  |  | ||||||
| # Run the bot | # Run the bot | ||||||
| # CMD ["python", "-OO", "-m", "PlexBot"] | CMD ["python", "-OO", "-m", "PlexBot"] | ||||||
| CMD ["python", "-m", "PlexBot"] |  | ||||||
|   | |||||||
							
								
								
									
										30
									
								
								Jenkinsfile
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										30
									
								
								Jenkinsfile
									
									
									
									
										vendored
									
									
								
							| @@ -25,6 +25,7 @@ pipeline { | |||||||
|                 sh  ''' conda create --yes -n ${BUILD_TAG} python |                 sh  ''' conda create --yes -n ${BUILD_TAG} python | ||||||
|                         source /var/lib/jenkins/miniconda3/etc/profile.d/conda.sh |                         source /var/lib/jenkins/miniconda3/etc/profile.d/conda.sh | ||||||
|                         conda activate ${BUILD_TAG} |                         conda activate ${BUILD_TAG} | ||||||
|  |                         pip install -r requirements.txt | ||||||
|                         pip install pylint |                         pip install pylint | ||||||
|                     ''' |                     ''' | ||||||
|             } |             } | ||||||
| @@ -35,7 +36,7 @@ pipeline { | |||||||
|                 echo "Style check" |                 echo "Style check" | ||||||
|                 sh  ''' source /var/lib/jenkins/miniconda3/etc/profile.d/conda.sh |                 sh  ''' source /var/lib/jenkins/miniconda3/etc/profile.d/conda.sh | ||||||
|                         conda activate ${BUILD_TAG} |                         conda activate ${BUILD_TAG} | ||||||
|                         pylint CHANGE_ME || true |                         pylint PlexBot || true | ||||||
|                     ''' |                     ''' | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
| @@ -47,20 +48,12 @@ pipeline { | |||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
|             steps { |             steps { | ||||||
|                 sh  ''' source /var/lib/jenkins/miniconda3/etc/profile.d/conda.sh |                 sh  './deploy/build.sh' | ||||||
|                         conda activate ${BUILD_TAG} |  | ||||||
|                         pwd |  | ||||||
|                         ls |  | ||||||
|                         python setup.py bdist_wheel |  | ||||||
|                     ''' |  | ||||||
|             } |             } | ||||||
|             post { |         } | ||||||
|                 always { |         stage('Push Image') { | ||||||
|                     // Archive unit tests for the future |             steps { | ||||||
|                     archiveArtifacts (allowEmptyArchive: true, |                 sh './deploy/push.sh' | ||||||
|                                      artifacts: 'dist/*whl', |  | ||||||
|                                      fingerprint: true) |  | ||||||
|                 } |  | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| @@ -68,14 +61,7 @@ pipeline { | |||||||
|     post { |     post { | ||||||
|         always { |         always { | ||||||
|             sh 'conda remove --yes -n ${BUILD_TAG} --all' |             sh 'conda remove --yes -n ${BUILD_TAG} --all' | ||||||
|         } |             sh 'docker system prune -a -f' | ||||||
|         failure { |  | ||||||
|             emailext ( |  | ||||||
|                 subject: "FAILED: Job '${env.JOB_NAME} [${env.BUILD_NUMBER}]'", |  | ||||||
|                 body: """<p>FAILED: Job '${env.JOB_NAME} [${env.BUILD_NUMBER}]':</p> |  | ||||||
|                          <p>Check console output at "<a href='${env.BUILD_URL}'>${env.JOB_NAME} [${env.BUILD_NUMBER}]</a>"</p>""", |  | ||||||
|                 recipientProviders: [[$class: 'DevelopersRecipientProvider']] |  | ||||||
|             ) |  | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| } | } | ||||||
|   | |||||||
							
								
								
									
										17
									
								
								Makefile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								Makefile
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,17 @@ | |||||||
|  | .PHONY: help pull build clean | ||||||
|  | .DEFAULT_GOAL: build | ||||||
|  |  | ||||||
|  | help: | ||||||
|  | 	@echo "make pull" | ||||||
|  | 	@echo "       Start docker container with pull" | ||||||
|  | 	@echo "make build" | ||||||
|  | 	@echo "       Start docker container rebuilding container" | ||||||
|  |  | ||||||
|  | pull: | ||||||
|  | 	docker-compose up | ||||||
|  |  | ||||||
|  | build: | ||||||
|  | 	docker-compose -f docker-compose_dev.yml up --build | ||||||
|  |  | ||||||
|  | clean: | ||||||
|  | 	docker system prune -a | ||||||
| @@ -1,3 +1,7 @@ | |||||||
|  | """ | ||||||
|  | Plex music bot for discord. | ||||||
|  |  | ||||||
|  | """ | ||||||
| import logging | import logging | ||||||
| import sys | import sys | ||||||
| from pathlib import Path | from pathlib import Path | ||||||
| @@ -8,19 +12,33 @@ import yaml | |||||||
| FORMAT = "%(asctime)s %(levelname)s: [%(filename)s:%(lineno)s - %(funcName)20s() ] %(message)s" | FORMAT = "%(asctime)s %(levelname)s: [%(filename)s:%(lineno)s - %(funcName)20s() ] %(message)s" | ||||||
|  |  | ||||||
| logging.basicConfig(format=FORMAT) | logging.basicConfig(format=FORMAT) | ||||||
| logger = logging.getLogger("PlexBot") | root_log = logging.getLogger() | ||||||
|  | plex_log = logging.getLogger("Plex") | ||||||
|  | bot_log = logging.getLogger("Bot") | ||||||
|  |  | ||||||
|  |  | ||||||
| def load_config(filename: str) -> Dict[str, str]: | def load_config(basedir: str,filename: str) -> Dict[str, str]: | ||||||
|  |     """Loads config from yaml file | ||||||
|  |  | ||||||
|  |     Grabs key/value config pairs from a file. | ||||||
|  |  | ||||||
|  |     Args: | ||||||
|  |         filename: str path to yaml file. | ||||||
|  |  | ||||||
|  |     Returns: | ||||||
|  |         Dict[str, str] Values from config file. | ||||||
|  |  | ||||||
|  |     Raises: | ||||||
|  |         FileNotFound Configuration file not found. | ||||||
|  |     """ | ||||||
|     # All config files should be in /config |     # All config files should be in /config | ||||||
|     # for docker deployment. |     # for docker deployment. | ||||||
|     filename = Path("/config", filename) |     filename = Path(basedir, filename) | ||||||
|     try: |     try: | ||||||
|         with open(filename, "r") as f: |         with open(filename, "r") as config_file: | ||||||
|             config = yaml.safe_load(f) |             config = yaml.safe_load(config_file) | ||||||
|     except FileNotFoundError: |     except FileNotFoundError: | ||||||
|         logging.fatal("Configuration file not found.") |         root_log.fatal("Configuration file not found at '"+str(filename)+"'.") | ||||||
|         sys.exit(-1) |         sys.exit(-1) | ||||||
|  |  | ||||||
|     # Convert str level type to logging constant |     # Convert str level type to logging constant | ||||||
| @@ -31,7 +49,12 @@ def load_config(filename: str) -> Dict[str, str]: | |||||||
|         "ERROR": logging.ERROR, |         "ERROR": logging.ERROR, | ||||||
|         "CRITICAL": logging.CRITICAL, |         "CRITICAL": logging.CRITICAL, | ||||||
|     } |     } | ||||||
|     level = config["general"]["log_level"] |  | ||||||
|     config["general"]["log_level"] = levels[level.upper()] |     config["root"]["log_level"] = levels[config["root"]["log_level"].upper()] | ||||||
|  |     config["plex"]["log_level"] = levels[config["plex"]["log_level"].upper()] | ||||||
|  |     config["discord"]["log_level"] = levels[config["discord"]["log_level"].upper()] | ||||||
|  |  | ||||||
|  |     if config["lyrics"] and config["lyrics"]["token"].lower() == "none": | ||||||
|  |         config["lyrics"] = None | ||||||
|  |  | ||||||
|     return config |     return config | ||||||
|   | |||||||
| @@ -1,14 +1,21 @@ | |||||||
|  | """ | ||||||
|  | Main entrypoint script. | ||||||
|  | Sets up loggers and initiates bot. | ||||||
|  | """ | ||||||
| import logging | import logging | ||||||
|  |  | ||||||
| from discord.ext.commands import Bot | from discord.ext.commands import Bot | ||||||
|  |  | ||||||
| from . import FORMAT | from . import load_config | ||||||
| from .bot import General | from .bot import General | ||||||
| from .bot import Plex | from .bot import Plex | ||||||
| from PlexBot import load_config |  | ||||||
|  |  | ||||||
| # Load config from file | # Load config from file | ||||||
| config = load_config("config.yaml") | configdir = "config" | ||||||
|  | from os import geteuid | ||||||
|  | if geteuid() == 0: | ||||||
|  |     configdir = "/config" | ||||||
|  | config = load_config(configdir,"config.yaml") | ||||||
|  |  | ||||||
| BOT_PREFIX = config["discord"]["prefix"] | BOT_PREFIX = config["discord"]["prefix"] | ||||||
| TOKEN = config["discord"]["token"] | TOKEN = config["discord"]["token"] | ||||||
| @@ -16,14 +23,30 @@ TOKEN = config["discord"]["token"] | |||||||
| BASE_URL = config["plex"]["base_url"] | BASE_URL = config["plex"]["base_url"] | ||||||
| PLEX_TOKEN = config["plex"]["token"] | PLEX_TOKEN = config["plex"]["token"] | ||||||
| LIBRARY_NAME = config["plex"]["library_name"] | LIBRARY_NAME = config["plex"]["library_name"] | ||||||
| LOG_LEVEL = config["general"]["log_level"] |  | ||||||
|  | if config["lyrics"]: | ||||||
|  |     LYRICS_TOKEN = config["lyrics"]["token"] | ||||||
|  | else: | ||||||
|  |     LYRICS_TOKEN = None | ||||||
|      |      | ||||||
| # Set appropiate log level | # Set appropiate log level | ||||||
| logger = logging.getLogger("PlexBot") | root_log = logging.getLogger() | ||||||
| logging.basicConfig(format=FORMAT) | plex_log = logging.getLogger("Plex") | ||||||
| logger.setLevel(LOG_LEVEL) | bot_log = logging.getLogger("Bot") | ||||||
|  |  | ||||||
|  | plex_log.setLevel(config["plex"]["log_level"]) | ||||||
|  | bot_log.setLevel(config["discord"]["log_level"]) | ||||||
|  |  | ||||||
|  | plex_args = { | ||||||
|  |     "base_url": BASE_URL, | ||||||
|  |     "plex_token": PLEX_TOKEN, | ||||||
|  |     "lib_name": LIBRARY_NAME, | ||||||
|  |     "lyrics_token": LYRICS_TOKEN, | ||||||
|  | } | ||||||
|  |  | ||||||
| bot = Bot(command_prefix=BOT_PREFIX) | bot = Bot(command_prefix=BOT_PREFIX) | ||||||
|  | # Remove help command, we have our own custom one. | ||||||
|  | bot.remove_command("help") | ||||||
| bot.add_cog(General(bot)) | bot.add_cog(General(bot)) | ||||||
| bot.add_cog(Plex(bot, BASE_URL, PLEX_TOKEN, LIBRARY_NAME, BOT_PREFIX)) | bot.add_cog(Plex(bot, **plex_args)) | ||||||
| bot.run(TOKEN) | bot.run(TOKEN) | ||||||
|   | |||||||
							
								
								
									
										5
									
								
								PlexBot/__version__.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								PlexBot/__version__.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,5 @@ | |||||||
|  | """Track version number of package.""" | ||||||
|  | VERSION = "1.0.3" | ||||||
|  |  | ||||||
|  | if __name__ == "__main__": | ||||||
|  |     print(VERSION) | ||||||
							
								
								
									
										1038
									
								
								PlexBot/bot.py
									
									
									
									
									
								
							
							
						
						
									
										1038
									
								
								PlexBot/bot.py
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										10
									
								
								PlexBot/exceptions.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								PlexBot/exceptions.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,10 @@ | |||||||
|  | class MediaNotFoundError(Exception): | ||||||
|  |     """Raised when a PlexAPI media resource cannot be found.""" | ||||||
|  |  | ||||||
|  |     pass | ||||||
|  |  | ||||||
|  |  | ||||||
|  | class VoiceChannelError(Exception): | ||||||
|  |     """Raised when user is not connected to a voice channel.""" | ||||||
|  |  | ||||||
|  |     pass | ||||||
							
								
								
									
										147
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										147
									
								
								README.md
									
									
									
									
									
								
							| @@ -1,28 +1,74 @@ | |||||||
| # Plex-Bot | # Plex-Bot | ||||||
|  |  | ||||||
|  | [](https://app.codacy.com/manual/jarulsamy/Plex-Bot?utm_source=github.com&utm_medium=referral&utm_content=jarulsamy/Plex-Bot&utm_campaign=Badge_Grade_Dashboard) | ||||||
|  | [](http://perso.crans.org/besson/LICENSE.html) | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| A Python-based Plex music bot for discord. | A Python-based Plex music bot for discord. | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| ## Setup | ## Setup | ||||||
|  |  | ||||||
| Plex-Bot runs entirely in a Docker container. Ensure you have Docker and docker-compose installed according to the official Docker [documentation](https://docs.docker.com/get-docker/). | Plex-Bot runs entirely in a Docker container. Ensure you have Docker and docker-compose installed according to the official Docker [documentation](https://docs.docker.com/get-docker/). | ||||||
|  |  | ||||||
| 1.  Clone the repository and `cd` into it: | 1. Create a new folder and `cd` into it: | ||||||
|  |  | ||||||
| ``` |    ```bash | ||||||
| $ git clone https://github.com/jarulsamy/Plex-Bot |    mkdir Plex-Bot | ||||||
| $ cd Plex-Bot |    cd Plex-Bot | ||||||
| ``` |    ``` | ||||||
|  |  | ||||||
| 2. Create a configuration folder: | 2. Make a `docker-compose.yml` file or use this sample: | ||||||
|  |  | ||||||
| Create a new `config` folder and copy the sample config file into it: |    ```yml | ||||||
|  |    version: "3" | ||||||
|  |    services: | ||||||
|  |      plex-bot: | ||||||
|  |        container_name: "PlexBot" | ||||||
|  |        image: jarulsamy/plex-bot:latest | ||||||
|  |        environment: | ||||||
|  |          - PUID=1000 | ||||||
|  |          - PGID=1000 | ||||||
|  |          - TZ=America/Denver | ||||||
|  |        # Required dir for configuration files | ||||||
|  |        volumes: | ||||||
|  |          - "./config:/config:ro" | ||||||
|  |        restart: "unless-stopped" | ||||||
|  |    ``` | ||||||
|  |  | ||||||
| ``` | 3. Create a new `config` folder and create a config file like this:: | ||||||
| $ mkdir config |  | ||||||
| $ cp sample-config.yaml config/config.yaml |  | ||||||
| ``` |  | ||||||
|  |  | ||||||
| 3.  Create a Discord bot application: |     ```bash | ||||||
|  |     mkdir config | ||||||
|  |     cd config | ||||||
|  |     touch config.yaml | ||||||
|  |     ``` | ||||||
|  |  | ||||||
|  |    ```yml | ||||||
|  |    # Create a file called config.yaml with the following contents | ||||||
|  |  | ||||||
|  |    root: | ||||||
|  |      log_level: "info" | ||||||
|  |  | ||||||
|  |    discord: | ||||||
|  |      prefix: "?" | ||||||
|  |      token: "<BOT_TOKEN>" | ||||||
|  |      log_level: "debug" | ||||||
|  |  | ||||||
|  |    plex: | ||||||
|  |      base_url: "<BASE_URL>" | ||||||
|  |      token: "<PLEX_TOKEN>" | ||||||
|  |      library_name: "<LIBRARY_NAME>" | ||||||
|  |      log_level: "debug" | ||||||
|  |  | ||||||
|  |    lyrics: | ||||||
|  |      token: "none" # Add your token here if you enable lyrics | ||||||
|  |    ``` | ||||||
|  |  | ||||||
|  | 4. Create a Discord bot application: | ||||||
|  |  | ||||||
|     1. Go to the Discord developer portal, [here](https://discord.com/developers/applications). |     1. Go to the Discord developer portal, [here](https://discord.com/developers/applications). | ||||||
|  |  | ||||||
| @@ -38,44 +84,69 @@ $ cp sample-config.yaml config/config.yaml | |||||||
|     6. Click Create Bot User |     6. Click Create Bot User | ||||||
|         This will provide you with your bot Username and Token |         This will provide you with your bot Username and Token | ||||||
|  |  | ||||||
|     7. Fill in all the necessary numbers in `config/config.yaml` |     7. Fill in the bot token in `config/config.yaml` | ||||||
|  |  | ||||||
| 4. Get your plex token: | 5. Get your plex token: | ||||||
|  |  | ||||||
|    Refer to the official [plex documentation](https://support.plex.tv/articles/204059436-finding-an-authentication-token-x-plex-token/). |      * Refer to the official [plex documentation](https://support.plex.tv/articles/204059436-finding-an-authentication-token-x-plex-token/). | ||||||
|  |  | ||||||
|    Add it to `config/config.yaml` in the appropiate spot. |      * Add it to `config/config.yaml` in the appropiate spot. | ||||||
|  |  | ||||||
| 5. Start the service: | 6. Get your Lyrics Genius token (Optional): | ||||||
|  |  | ||||||
| ``` |    If you would like to enable the lyrics feature of the bot, you need to signup for a free GeniusLyrics account, [here](https://genius.com/api-clients). | ||||||
| $ docker-compose up --build |  | ||||||
|  |    After you make an account: | ||||||
|  |  | ||||||
|  |    1. Click New API Client | ||||||
|  |  | ||||||
|  |    2. Set the app website url to: `https://github.com/jarulsamy/Plex-Bot` | ||||||
|  |  | ||||||
|  |    3. Set the redirect url to: `http://localhost` | ||||||
|  |  | ||||||
|  |    4. Copy the **Client Access Token** and replace `None` with your token in `config/config.yaml` | ||||||
|  |  | ||||||
|  | 7. Customize remaining settings | ||||||
|  |  | ||||||
|  |     Set any remaining settings in the config file that you would like. Such as music library, and base url of the Plex server. | ||||||
|  |  | ||||||
|  | 8. Start the service: | ||||||
|  |  | ||||||
|  |    ```bash | ||||||
|  |    docker-compose up -d | ||||||
|  |    ``` | ||||||
|  |  | ||||||
|  | ## Logs | ||||||
|  |  | ||||||
|  | You can view the logs with the following command | ||||||
|  |  | ||||||
|  | ```bash | ||||||
|  | docker-compose logs -f CONTAINER_NAME_OR_ID | ||||||
|  |  | ||||||
|  | # For example | ||||||
|  | docker-compose logs -f PlexBot | ||||||
| ``` | ``` | ||||||
|  |  | ||||||
| ## Usage | ## Usage | ||||||
|  |  | ||||||
| ``` | ```text | ||||||
| General: | General: | ||||||
|   kill - Stop the bot. |     kill [silent] - Halt the bot [silently]. | ||||||
|  |     help - Print this help message. | ||||||
|  |     cleanup - Delete old messages from the bot. | ||||||
|  |  | ||||||
| Plex: | Plex: | ||||||
|   np - View currently playing song. |     play <SONG_NAME> - Play a song from the plex server. | ||||||
|   pause - Pause currently playing song. |     album <ALBUM_NAME> - Queue an entire album to play. | ||||||
|   play - Play a song from the Plex library. |     playlist <PLAYLIST_NAME> - Queue an entire playlist to play. | ||||||
|   resume - Resume a paused song. |     lyrics - Print the lyrics of the song (Requires Genius API) | ||||||
|   skip - Skip a song. |     np - Print the current playing song. | ||||||
|   stop - Stop playing. |     stop - Halt playback and leave vc. | ||||||
| No Category: |     pause - Pause playback. | ||||||
|   help   Shows this message |     resume - Resume playback. | ||||||
|  |     clear - Clear play queue. | ||||||
|  |  | ||||||
| Type ?help command for more info on a command. | [] - Optional args. | ||||||
| You can also type ?help category for more info on a category. |  | ||||||
| ``` | ``` | ||||||
|  |  | ||||||
| ## Support |  | ||||||
|  |  | ||||||
| Reach out to me at one of the following places! |  | ||||||
|  |  | ||||||
| -   Email (Best) at joshua.gf.arul@gmail.com |  | ||||||
| -   Twitter at <a href="http://twitter.com/jarulsamy_" target="_blank">`@jarulsamy_`</a> |  | ||||||
|  |  | ||||||
| * * * | * * * | ||||||
|   | |||||||
							
								
								
									
										
											BIN
										
									
								
								assets/screenshot.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								assets/screenshot.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 17 KiB | 
							
								
								
									
										14
									
								
								deploy/build.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										14
									
								
								deploy/build.sh
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,14 @@ | |||||||
|  | #!/usr/bin/env bash | ||||||
|  |  | ||||||
|  | VERSION=$(python PlexBot/__version__.py) | ||||||
|  |  | ||||||
|  | docker build -t "jarulsamy/plex-bot:$VERSION" . | ||||||
|  |  | ||||||
|  | if [ $? -eq 0 ] | ||||||
|  | then | ||||||
|  |   echo "Successfully build docker image." | ||||||
|  |   exit 0 | ||||||
|  | else | ||||||
|  |   echo "Failed to build docker image." >&2 | ||||||
|  |   exit 1 | ||||||
|  | fi | ||||||
							
								
								
									
										14
									
								
								deploy/push.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										14
									
								
								deploy/push.sh
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,14 @@ | |||||||
|  | #!/usr/bin/env bash | ||||||
|  |  | ||||||
|  | VERSION=$(python PlexBot/__version__.py) | ||||||
|  |  | ||||||
|  | docker push "jarulsamy/plex-bot:$VERSION" | ||||||
|  |  | ||||||
|  | if [ $? -eq 0 ] | ||||||
|  | then | ||||||
|  |   echo "Successfully pushed docker image." | ||||||
|  |   exit 0 | ||||||
|  | else | ||||||
|  |   echo "Failed to push docker image." >&2 | ||||||
|  |   exit 1 | ||||||
|  | fi | ||||||
| @@ -2,7 +2,7 @@ version: "3" | |||||||
| services: | services: | ||||||
|   plex-bot: |   plex-bot: | ||||||
|     container_name: "PlexBot" |     container_name: "PlexBot" | ||||||
|     build: . |     image: jarulsamy/plex-bot:latest | ||||||
|     environment: |     environment: | ||||||
|       - PUID=1000 |       - PUID=1000 | ||||||
|       - PGID=1000 |       - PGID=1000 | ||||||
| @@ -10,4 +10,4 @@ services: | |||||||
|     # Required dir for configuration files |     # Required dir for configuration files | ||||||
|     volumes: |     volumes: | ||||||
|       - "./config:/config:ro" |       - "./config:/config:ro" | ||||||
|     restart: "no" |     restart: "unless-stopped" | ||||||
|   | |||||||
							
								
								
									
										13
									
								
								docker-compose_dev.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								docker-compose_dev.yml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,13 @@ | |||||||
|  | version: "3" | ||||||
|  | services: | ||||||
|  |   plex-bot: | ||||||
|  |     container_name: "PlexBot" | ||||||
|  |     build: . | ||||||
|  |     environment: | ||||||
|  |       - PUID=1000 | ||||||
|  |       - PGID=1000 | ||||||
|  |       - TZ=America/Denver | ||||||
|  |     # Required dir for configuration files | ||||||
|  |     volumes: | ||||||
|  |       - "./config:/config:ro" | ||||||
|  |     restart: "no" | ||||||
| @@ -1,7 +1,7 @@ | |||||||
| discord.py==1.3.4 | discord.py==1.4.1 | ||||||
| PlexAPI==4.0.0 | PlexAPI==4.0.0 | ||||||
| fuzzywuzzy==0.18.0 | fuzzywuzzy==0.18.0 | ||||||
| python-Levenshtein==0.12.0 |  | ||||||
| pynacl==1.4.0 | pynacl==1.4.0 | ||||||
| ffmpeg==1.4 | ffmpeg==1.4 | ||||||
| PyYAML==5.3.1 | PyYAML==5.3.1 | ||||||
|  | lyricsgenius==2.0.0 | ||||||
|   | |||||||
| @@ -1,12 +1,16 @@ | |||||||
| general: | root: | ||||||
|   # Options: debug, info, warning, error, critical |  | ||||||
|   log_level: "info" |   log_level: "info" | ||||||
|  |  | ||||||
| discord: | discord: | ||||||
|   prefix: "?" |   prefix: "?" | ||||||
|   token: "<BOT_TOKEN>" |   token: "<BOT_TOKEN>" | ||||||
|  |   log_level: "debug" | ||||||
|  |  | ||||||
| plex: | plex: | ||||||
|   base_url: "<BASE_URL>" |   base_url: "<BASE_URL>" | ||||||
|   token: "<PLEX_TOKEN>" |   token: "<PLEX_TOKEN>" | ||||||
|   library_name: "<LIBRARY_NAME>" |   library_name: "<LIBRARY_NAME>" | ||||||
|  |   log_level: "debug" | ||||||
|  |  | ||||||
|  | lyrics: | ||||||
|  |   token: <CLIENT_ACCESS_TOKEN> | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user