diff --git a/config.go b/config.go
index 25ca85c27e976b8eb08caf2de9189126193dd860..3ec2e919783a5735398a1014dbe3859e0e62b176 100644
--- a/config.go
+++ b/config.go
@@ -13,8 +13,9 @@ var (
 	confPath string
 	parsed   = false
 
-	discordBridge  = make(map[string]bridgeConf)
-	telegramBridge = make(map[int64]bridgeConf)
+	discordPMQueue = make(map[string]*bridgeConf)
+	discordBridge  = make(map[string]*bridgeConf)
+	telegramBridge = make(map[int64]*bridgeConf)
 )
 
 func init() {
@@ -95,10 +96,14 @@ func setupConfig() {
 
 	for _, c := range config.Bridges.Item {
 		if c.Discord.Enable {
-			discordBridge[strconv.Itoa(c.Discord.ID)] = c
+			if c.Discord.ID < 0 {
+				discordPMQueue[strconv.Itoa(c.Discord.ID)] = &c
+			} else {
+				discordBridge[strconv.Itoa(c.Discord.ID)] = &c
+			}
 		}
 		if c.Telegram.Enable {
-			telegramBridge[int64(c.Telegram.ID)] = c
+			telegramBridge[int64(c.Telegram.ID)] = &c
 		}
 	}
 }
diff --git a/discord.go b/discord.go
index d3bd7fb4f6222beb8184c614924e65e91f3ab758..085ab3519ce450fdb93ddbc0a21990c6787fa23e 100644
--- a/discord.go
+++ b/discord.go
@@ -5,6 +5,7 @@ import (
 	"github.com/bwmarrin/discordgo"
 	tgbotapi "github.com/go-telegram-bot-api/telegram-bot-api"
 	"log"
+	"strconv"
 	"strings"
 )
 
@@ -41,7 +42,7 @@ func openDiscord() {
 		session = s
 	}
 
-	session.Identify.Intents = discordgo.IntentsGuildMessages
+	session.Identify.Intents = discordgo.IntentsGuildMessages | discordgo.IntentsDirectMessages
 	session.Token = "Bot " + config.Discord.Token
 
 	if err := session.Open(); err != nil {
@@ -58,6 +59,23 @@ func openDiscord() {
 		application = app
 	}
 
+	for uid, c := range discordPMQueue {
+		id := strconv.Itoa(-c.Discord.ID)
+		if st, err := session.UserChannelCreate(id); err != nil {
+			log.Printf("error creating user channel for %s: %s", id, err)
+		} else {
+			if c.Discord.ID, err = strconv.Atoi(st.ID); err != nil {
+				log.Printf("error parsing discord response for user channel: %s", err)
+			} else {
+				if config.System.Verbose {
+					log.Printf("configured user %s with channel %s", id, st.ID)
+				}
+				discordBridge[st.ID] = c
+				delete(discordPMQueue, uid)
+			}
+		}
+	}
+
 	ready <- struct{}{}
 }