Compare commits

..

1 Commits

Author SHA1 Message Date
8eb69dab14 set up registry auth
Some checks failed
continuous-integration/drone/push Build is failing
2020-12-27 20:42:44 -08:00
4 changed files with 26 additions and 62 deletions

View File

@ -1,25 +1,36 @@
---
kind: pipeline
type: exec
type: docker
name: main
trigger:
branch:
- master
platform:
os: linux
arch: amd64
steps:
- name: build
image: docker:latest
volumes:
- name: docker-socket
path: /var/run/docker.sock
commands:
- docker build -t registry.jfmonty2.com/minebot:latest .
- docker build -t registry.drone/minebot:latest .
when:
branch:
- master
- name: deploy
image: docker:latest
volumes:
- name: docker-socket
path: /var/run/docker.sock
environment:
REGISTRY_PWD:
from_secret: registry_pwd
commands:
- echo $REGISTRY_PWD | docker login -u drone --password-stdin registry.jfmonty2.com
- docker push registry.jfmonty2.com/minebot:latest
- echo $REGISTRY_PWD | docker login -u drone --password-stdin
- docker push registry.drone/minebot:latest
when:
branch:
- master
volumes:
- name: docker-socket
host:
path: /var/run/docker.sock

View File

@ -1,41 +0,0 @@
# Minebot
[![Build Status](https://drone.jfmonty2.com/api/badges/jfmonty2/minebot/status.svg)](https://drone.jfmonty2.com/jfmonty2/minebot)
Discord bot for controlling a Heavynode minecraft server.
Currently implemented commands:
* `!add` - adds a player to the whitelist
* `!remove` - removes a player from the whitelist
# Developing
This bot is built on [discord.py](https://discordpy.readthedocs.io/en/latest/), a Python library for Discord bots.
Discord.py makes heavy use of asynchronous Python (via the [asyncio](https://docs.python.org/3/library/asyncio.html) module).
It's worth a look if you've never experimented with that side of Python.
# Running
To run the bot, first install its dependencies:
```sh
pip install discord.py 'python-socketio>=4.0,<5.0'
```
It also expects the following environment variables:
* `DISCORD_TOKEN`: Discord API token
* `DISCORD_SERVER_ID` (Optional, may be excluded if the bot is only joined to one server)
* `HEAVYNODE_TOKEN`: Heavynode API token
* `HEAVYNODE_COOKIE_NAME`: Name of Heavynode `remember_web` cookie
* `HEAVYNODE_COOKIE_VALUE`: Value of Heavynode `remember_web` cookie
Any of these items may be read from a file instead of the environment, by appending `_FILE` to the environment variable
and setting its value to the path of the file. E.g. `export DISCORD_TOKEN_FILE=/path/to/token/file`
You can then run the bot directly:
```sh
python bot.py
```

7
bot.py
View File

@ -13,7 +13,6 @@ import heavynode
DISCORD_TOKEN = lib.getconfig('DISCORD_TOKEN')
DISCORD_SERVER_ID = int(lib.getconfig('DISCORD_SERVER_ID', 0))
HEAVYNODE_TOKEN = lib.getconfig('HEAVYNODE_TOKEN')
COOKIE_NAME = lib.getconfig('HEAVYNODE_COOKIE_NAME')
COOKIE_VALUE = lib.getconfig('HEAVYNODE_COOKIE_VALUE')
@ -31,11 +30,7 @@ bot.add_cleanup(hn.shutdown)
async def is_admin(ctx):
user = ctx.message.author
if DISCORD_SERVER_ID != 0:
guild = discord.utils.get(bot.guilds, id=DISCORD_SERVER_ID)
else:
guild = bot.guilds[0]
member = guild.get_member(user.id)
member = bot.guilds[0].get_member(user.id)
if member is not None:
for role in member.roles:
if role.name == 'Admin' or role.name == 'Mod':

5
lib.py
View File

@ -26,14 +26,13 @@ class MineBot(commands.Bot):
await super().close()
nodefault = object()
def getconfig(key, default=nodefault):
def getconfig(key, default=None):
if key in os.environ:
return os.environ[key]
elif f'{key}_FILE' in os.environ:
p = os.environ[f'{key}_FILE']
return pathlib.Path(p).read_text()
elif default is not nodefault:
elif default != None:
return default
else:
raise ConfigError('Missing config:', key)