Skip to content

Commit

Permalink
Merge pull request #19 from zekroTJA/dev
Browse files Browse the repository at this point in the history
added autorole command and system
  • Loading branch information
zekroTJA authored Dec 24, 2018
2 parents 86667f1 + 7fa2ec0 commit 230f7b8
Show file tree
Hide file tree
Showing 8 changed files with 157 additions and 7 deletions.
13 changes: 13 additions & 0 deletions cloc.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@

cloc|github.com/AlDanial/cloc v 1.74 T=0.50 s (74.0 files/s, 4188.0 lines/s)
--- | ---

Language|files|blank|comment|code
:-------|-------:|-------:|-------:|-------:
Go|29|283|12|1620
Bourne Shell|4|18|2|49
Markdown|1|16|0|38
YAML|2|4|0|28
SQL|1|3|0|21
--------|--------|--------|--------|--------
SUM:|37|324|14|1756
71 changes: 71 additions & 0 deletions commands/cmdautorole.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
package commands

import (
"fmt"
"time"

"github.com/zekroTJA/shinpuru/core"
"github.com/zekroTJA/shinpuru/util"
)

type CmdAutorole struct {
}

func (c *CmdAutorole) GetInvokes() []string {
return []string{"autorole", "arole"}
}

func (c *CmdAutorole) GetDescription() string {
return "set the autorole for the current guild"
}

func (c *CmdAutorole) GetHelp() string {
return "`autorole` - display currently set autorole\n" +
"`autorole <roleResolvable>` - set an auto role for the current guild"
}

func (c *CmdAutorole) GetGroup() string {
return GroupEtc
}

func (c *CmdAutorole) GetPermission() int {
return 9
}

func (c *CmdAutorole) Exec(args *CommandArgs) error {
if len(args.Args) < 1 {
currAutoRoleID, err := args.CmdHandler.db.GetGuildAutoRole(args.Guild.ID)
if err != nil && !core.IsErrDatabaseNotFound(err) {
return err
}
if currAutoRoleID == "" {
_, err := util.SendEmbed(args.Session, args.Channel.ID,
"There is no autorole set on this guild currently.", "", 0)
return err
}
_, err = util.FetchRole(args.Session, args.Guild.ID, currAutoRoleID)
if err != nil {
_, err := util.SendEmbedError(args.Session, args.Channel.ID,
"**ATTENTION:** The set auto role is no more existent on the guild!")
return err
}
_, err = util.SendEmbed(args.Session, args.Channel.ID,
fmt.Sprintf("Currently, <@&%s> is set as auto role.", currAutoRoleID), "", 0)
return err
}

newAutoRole, err := util.FetchRole(args.Session, args.Guild.ID, args.Args[0])
if err != nil {
msg, err := util.SendEmbedError(args.Session, args.Channel.ID,
"Sorry, but the entered role could not be fetched :(")
util.DeleteMessageLater(args.Session, msg, 5*time.Second)
return err
}
err = args.CmdHandler.db.SetGuildAutoRole(args.Guild.ID, newAutoRole.ID)
if err != nil {
return err
}
_, err = util.SendEmbed(args.Session, args.Channel.ID,
fmt.Sprintf("Autorole set to <@&%s>.", newAutoRole.ID), "", util.ColorEmbedUpdated)
return err
}
3 changes: 3 additions & 0 deletions core/database.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,9 @@ type Database interface {
GetGuildPrefix(guildID string) (string, error)
SetGuildPrefix(guildID, newPrefix string) error

GetGuildAutoRole(guildID string) (string, error)
SetGuildAutoRole(guildID, autoRoleID string) error

GetGuildPermissions(guildID string) (map[string]int, error)
SetGuildRolePermission(guildID, roleID string, permLvL int) error

Expand Down
25 changes: 25 additions & 0 deletions core/mysql.go
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,31 @@ func (m *MySql) SetGuildPrefix(guildID, newPrefix string) error {
return err
}

func (m *MySql) GetGuildAutoRole(guildID string) (string, error) {
var autorole string
err := m.DB.QueryRow("SELECT autorole FROM guilds WHERE guildID = ?", guildID).Scan(&autorole)
if err == sql.ErrNoRows {
err = ErrDatabaseNotFound
}
return autorole, err
}

func (m *MySql) SetGuildAutoRole(guildID, autoRoleID string) error {
res, err := m.DB.Exec("UPDATE guilds SET autorole = ? WHERE guildID = ?", autoRoleID, guildID)
if ar, err := res.RowsAffected(); ar == 0 {
if err != nil {
return err
}
_, err := m.DB.Exec("INSERT INTO guilds (guildID, autorole) VALUES (?, ?)", guildID, autoRoleID)
if err != nil {
return err
}
} else if err != nil {
return err
}
return err
}

func (m *MySql) GetMemberPermissionLevel(s *discordgo.Session, guildID string, memberID string) (int, error) {
guildPerms, err := m.GetGuildPermissions(guildID)
if err != nil {
Expand Down
32 changes: 32 additions & 0 deletions listeners/memberadd.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package listeners

import (
"strings"

"github.com/bwmarrin/discordgo"
"github.com/zekroTJA/shinpuru/core"
"github.com/zekroTJA/shinpuru/util"
)

type ListenerMemberAdd struct {
db core.Database
}

func NewListenerMemberAdd(db core.Database) *ListenerMemberAdd {
return &ListenerMemberAdd{
db: db,
}
}

func (l *ListenerMemberAdd) Handler(s *discordgo.Session, e *discordgo.GuildMemberAdd) {
autoRoleID, err := l.db.GetGuildAutoRole(e.GuildID)
if err != nil && !core.IsErrDatabaseNotFound(err) {
util.Log.Errorf("Failed getting autorole for guild '%s' from database: %s", e.GuildID, err.Error())
}
err = s.GuildMemberRoleAdd(e.GuildID, e.User.ID, autoRoleID)
if err != nil && strings.Contains(err.Error(), `{"code": 10011, "message": "Unknown Role"}`) {
l.db.SetGuildAutoRole(e.GuildID, "")
} else if err != nil {
util.Log.Errorf("Failed setting autorole for member '%s': %s", e.User.ID, err.Error())
}
}
2 changes: 2 additions & 0 deletions main.go
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,7 @@ func main() {
cmdHandler.RegisterCommand(new(commands.CmdSay))
cmdHandler.RegisterCommand(new(commands.CmdQuote))
cmdHandler.RegisterCommand(new(commands.CmdGame))
cmdHandler.RegisterCommand(new(commands.CmdAutorole))

//////////////////////////
// BOT SESSION CREATION //
Expand All @@ -103,6 +104,7 @@ func main() {
session.AddHandler(listeners.NewListenerReady(config, database).Handler)
session.AddHandler(listeners.NewListenerCmd(config, database, cmdHandler).Handler)
session.AddHandler(listeners.NewListenerGuildJoin(config).Handler)
session.AddHandler(listeners.NewListenerMemberAdd(database).Handler)

err = session.Open()
if err != nil {
Expand Down
3 changes: 3 additions & 0 deletions scripts/cloc.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
#!/bin/bash

cloc . --md > ./cloc.md
15 changes: 8 additions & 7 deletions scripts/dbScheme.sql
Original file line number Diff line number Diff line change
Expand Up @@ -3,16 +3,11 @@ SET time_zone = "+00:00";
CREATE DATABASE IF NOT EXISTS `shinpuru` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
USE `shinpuru`;

DROP TABLE IF EXISTS `guildmembers`;
CREATE TABLE `guildmembers` (
`guilduserBlob` text NOT NULL,
`permlvl` int(11) NOT NULL DEFAULT '0'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

DROP TABLE IF EXISTS `guilds`;
CREATE TABLE `guilds` (
`guildID` text NOT NULL,
`prefix` text NOT NULL
`prefix` text NOT NULL,
`autorole` text NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

DROP TABLE IF EXISTS `permissions`;
Expand All @@ -21,3 +16,9 @@ CREATE TABLE `permissions` (
`guildID` text NOT NULL,
`permission` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

DROP TABLE IF EXISTS `settings`;
CREATE TABLE `settings` (
`setting` text NOT NULL,
`value` text NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

0 comments on commit 230f7b8

Please sign in to comment.