Giter Club home page Giter Club logo

Comments (100)

kiranshila avatar kiranshila commented on June 14, 2024 6

I'm going to do a few last tests with the direct api then publish the release!

from doplarr.

onedr0p avatar onedr0p commented on June 14, 2024 3

Overseerr looks like the most popular choice of them all. The developers are super responsive and their app is very fast and very pretty.

If anything you could deploy multiple Doplarr bots with different profiles configured to each one.

from doplarr.

kiranshila avatar kiranshila commented on June 14, 2024 3

@vp-en I found the bug that was causing the those issues, I forgot to pass in the bool that checks if the request was 4K. I also overhauled the response messages for the different media states. I'm finishing up these patches, I basically rewrote all the interaction flow control so now there is a single state machine that controls it, making the whole thing easier to modify instead of a ton of nested ifs.

from doplarr.

cpt-kuesel avatar cpt-kuesel commented on June 14, 2024 2

I vote for Overseerr Support as well. Their API structure is well built, at least thats what I gathered from talking with the requestrr and lunasea devs.

from doplarr.

kiranshila avatar kiranshila commented on June 14, 2024 2

Made a lot of progress today, requesting movies basically works:

You get an error message in discord for quota limits

image

And an error for missing associated account
image

I think I prefer this - requiring you have a mapping from user in overseerr to discord rather than having a default, but let me know what you think.

from doplarr.

cpt-kuesel avatar cpt-kuesel commented on June 14, 2024 2

I like your approach on this!
My Overseerr users that are on my Discord Server all have their respective Discord ID mapped. So I am well prepared 😄

Which profile do you use when you send the request to Overseerr? Do you take the default one for movies/shows that is configured in Overseerr? Or does the user need to choose it when I have multiple?
My preference would just be default profile.

from doplarr.

onedr0p avatar onedr0p commented on June 14, 2024 2

I was able to get this working and tested against adding a movie and tv show 🎉

from doplarr.

vp-en avatar vp-en commented on June 14, 2024 2

I'm not sure you need to - the issue lies in this part of the code

(defn all-users []
(a/go
(->> (a/<! (GET "/user"))
(then (comp :results :body))
(else utils/fatal-error))))

It uses the API call GET from /user, but by default that only gets the first 10 users.. So the issue will only appear if you have more than 10 users, and if the user in question will be the 11th (or later) user.
By forcing it to get more users, like /user?take=1000, it'll actually work as intended 👍
So it works if you edit that line, and (re)compile it. So I think it's up to @kiranshila to fix it 😄

But thanks anyways 👍

from doplarr.

kiranshila avatar kiranshila commented on June 14, 2024 1

Great! I'm going to work on the backlog of a few of these easier bugs/enhancements first, then I'll dive into this.

from doplarr.

onedr0p avatar onedr0p commented on June 14, 2024 1

Also, here's a link to their API docs https://api-docs.overseerr.dev/

from doplarr.

kiranshila avatar kiranshila commented on June 14, 2024 1

Yeah, + is correct, Java isn't wrong lol, its a bug in Overseerr. I have a fix in place rn, it's just annoying haha

from doplarr.

vp-en avatar vp-en commented on June 14, 2024 1

It would be nice if checked for permission(s) as well, and reported back to the user if they don't have permission. E.g. to the profiles associated with the 4K Sonarr / Radarr instances.

from doplarr.

vp-en avatar vp-en commented on June 14, 2024 1

It would be nice if checked for permission(s) as well, and reported back to the user if they don't have permission. E.g. to the profiles associated with the 4K Sonarr / Radarr instances.

What permissions are you referring to? Just 4K vs non-4K, or quota limits, or other stuff. I'm still trying to think of a nice way to do the 4K split, but it looks like that requires having two different servers up, it can't just use a different profile afaik.

Exactly what I'm referring to (the 4K vs the non-4K permissions) 😄 .

To use 4K instances in Overseerr, you'll need separate Radarr / Sonarr instances for that.
So, in Overseerr, it's usually setup (if you want to use 4K instances) like so:
1x Radarr for non-4K movie content
1x Sonarr for non-4K TV content
1x Radarr for 4K movie content
1x Sonarr for 4K TV content
All instances are separate and doesn't share profiles.

In my case, I've just named the non-4K Radarr/Sonarr profiles to "HD-1080p" and the 4K Radarr/Sonarr profiles to "UHD-4K". So they do have different profile names, not sure if that matters at all.

E.g.
https://i.imgur.com/79ymn1c.png

from doplarr.

kiranshila avatar kiranshila commented on June 14, 2024 1

Got it. Yeah, I'll need to chew on that a bit - I'll probably do it like the drop down for profile select, but I have to find which API endpoint lets me check if a user has permission for that.

from doplarr.

cpt-kuesel avatar cpt-kuesel commented on June 14, 2024 1

just for clarification, i meant the overseer profiles as well, @vp-en did a better job describing it :)

from doplarr.

kiranshila avatar kiranshila commented on June 14, 2024 1

Sorry I've been quiet on this - got a ton of school stuff to catch up on. I'll finish this up soon.

from doplarr.

kiranshila avatar kiranshila commented on June 14, 2024 1

I'm wondering how I can limit the bot to only work in a specific channel though. Do you have any thoughts on this/ideas?

It's not possible with the current slash command API, that's why we need the role.

from doplarr.

vp-en avatar vp-en commented on June 14, 2024 1

Ah shit mate, I think I figured it out 👍

I took my friends ID and put it into the admin account of Overseerr (marked as Owner in Overseerr) - and then it worked.

So I think there's something going on there 😄

from doplarr.

vp-en avatar vp-en commented on June 14, 2024 1

Clojure code looks strange to me lol. But to clarify, the bot only seems to allow the ID/Discord-user associated with the owner account of the Overseerr instance if that makes sense.

from doplarr.

kiranshila avatar kiranshila commented on June 14, 2024 1

Alright here is my solution, ping the endpoint once to find number of ids, then get all of them. That's the only way without having a magic maximum users number

(defn num-users []
  (a/go
    (->> (a/<! (GET "/user" {:query-params {:take 1}}))
         (then #(s/select-one [:body :pageInfo :results] %))
         (else utils/fatal-error))))

(defn all-users []
  (a/go
    (->> (a/<! (GET "/user" {:query-params {:take (a/<! (num-users))}}))
         (then #(->> (s/select-one [:body :results] %)
                     (map :id)
                     (into [])))
         (else utils/fatal-error))))

from doplarr.

vp-en avatar vp-en commented on June 14, 2024 1

I'll test in a short while 👍 I'll edit this post with the "results"

Edit: Sorry don't have time for much more than this
What works:

  • Requesting a movie now works properly, even for the 66th user 👍
  • Requesting a movie that's already on Plex gives the This has already been requested message -- would be nice if this message was different - like This movie is already on Plex
  • Requesting a movie that's already been requested gives the This has already been requested message
  • It's possible to request in 4K, IF the movie is not present in Plex already. So if it's a totally "new" movie, it'll go through no problems.

Issues:

  • If the movie is already present in Plex, it'll give the This has already been requested message, if you request it in 4K.. Even if it's not been requested in 4K in Overseerr. If you check manually on the website, you'll see it's not been requested in 4K.

from doplarr.

kiranshila avatar kiranshila commented on June 14, 2024 1

Very helpful! Thank you!

Yeah the requested deal has a few more states that I missed. I also noticed that things currently downloading also show up as un-requested.

from doplarr.

kiranshila avatar kiranshila commented on June 14, 2024 1

@vp-en Found the bugs, should be squashed now

from doplarr.

vp-en avatar vp-en commented on June 14, 2024 1

I'm surprised Overseerr doesn't throw an error when requesting partial seasons

Yeah kinda thought that would happen as well. Tested it, just in case lol 👍

Also, not sure if this is relevant and/or avoidable, but the docker instance crashes when a user inputs a imdb url..
I'm guessing it crashes when other urls are put in.. Haven't tested it that much, just did it by accident

from doplarr.

kiranshila avatar kiranshila commented on June 14, 2024 1

Alright @vp-en I think I got that sorted. How many bugs could there possibly be haha

from doplarr.

vp-en avatar vp-en commented on June 14, 2024 1

Ah alright :D Then I think it works. I'll do a movie test in a few minutes, and update this post

Movie requests also work. So I guess it's all good, atleast from my short amount of testing 👍

from doplarr.

AstralDestiny avatar AstralDestiny commented on June 14, 2024 1

So not sure what I did wrong when trying it out but I don't see any slash commands not even greyed out stuff either. Bot is online but not seeing commands nor is it responding to any commands, I'm using it in container with docker.

from doplarr.

AstralDestiny avatar AstralDestiny commented on June 14, 2024 1

Yeah I missed the part about OAuth my bad. Ahaha

Sorry about that.
I went through the steps of adding the bot via permissions and such and like didn't even notice I was supposed to do it via OAuth flow part.

from doplarr.

vp-en avatar vp-en commented on June 14, 2024

Hey mate, not sure if this is in the scope of your Doplarr bot... But!

Overseerr has native support for separate 4K Radarr/Sonarr servers.. Overseerr also manages user permissions, like who can request 4K, who can't, who can request "normal" content, and who can't .. and so on.

It would be nice to have separate commands for the separate 4K Radarr/Sonarr servers, which are configured through Overseerr. So commands like /4kmovie and /4ktv to request through Overseerr, specifically using the separate 4K Radarr/Sonarr servers.

I made a similair request on the requestrr repo.

from doplarr.

kiranshila avatar kiranshila commented on June 14, 2024

So, the tricky bit is that it's a slippery slope, once we add separate commands for individual profiles, we'd have to keep doing that for all potential profiles, which doesn't scale. The profile selection would happen inside the single \request interaction. I'm going to track that feature in #14.

So - we would need to connect the discord user to the overserr user and then add a separate interaction screen for profile selection that filters by what that user is able to request.

The reason we would do this inside the interaction is because it would be a hot mess to try to connect the overserr permissions to discord permission as the permissions structuring for the slash commands is a nightmare.

I haven't used either ombi or overseerr, nor do I personally plan to, so I have to look more into how it all works.

There seem to be even more options than those two as well, I saw Conreq and Cheddarr just to name a few. The more APIs we add, the more difficult managing them all become, so I think I might just pick one for the time being.

From a cursory look, I think I will go with Overseerr. Of the people following this issue, are there any thoughts on this?

from doplarr.

onedr0p avatar onedr0p commented on June 14, 2024

@kiranshila thanks, looking forward to it!

from doplarr.

kiranshila avatar kiranshila commented on June 14, 2024

I've been reading the overseer docs, seems straightforward. The fact that users can "just have" a discord id as part of their metadata makes this pretty easy. I'm going to need to do some checks to make sure that if we are using overseer, validate that the user can perform the request and if not, return a permission error dialog.

from doplarr.

cpt-kuesel avatar cpt-kuesel commented on June 14, 2024

i am running overseerr and am willing to test anything you need tested in that regard!

from doplarr.

ahkamyaqeen avatar ahkamyaqeen commented on June 14, 2024

@kiranshila if you are open to pull requests, I'd love to help implement this feature (I do have a background in using Clojure)

from doplarr.

kiranshila avatar kiranshila commented on June 14, 2024

@ahkamyaqeen Yeah, if you'd like - I was going to tackle it this weekend, though.

from doplarr.

kiranshila avatar kiranshila commented on June 14, 2024

Started today - the api is actually a little wonky, not using the modern query params spec, which is throwing errors for search terms with spaces as the Java 11 URLEncoder encodes spaces as +.

I opened an issue here sct/overseerr#2010

from doplarr.

onedr0p avatar onedr0p commented on June 14, 2024

@kiranshila there's a interesting stackoverflow about that issue. Seems pretty lengthy, maybe there's a workaround for now?

https://stackoverflow.com/questions/4737841/urlencoder-not-able-to-translate-space-character

from doplarr.

onedr0p avatar onedr0p commented on June 14, 2024

Oh definitely a Bug on their end, I'm just mentioning you can likely workaround it for now until it's fixed by them upstream. The first answer in the stackoverflow seemed like it would do.

/ignore me, didn't read you put a work around in already lol

from doplarr.

kiranshila avatar kiranshila commented on June 14, 2024

The specific HTTP wrapper I am using does a URI encode before it submits the request anyway, so I am manually creating the query param string instead of the nice {:query-params ... construct. URI encoding puts spaces to %20, so it works out.

from doplarr.

kiranshila avatar kiranshila commented on June 14, 2024

I like your approach on this!
My Overseerr users that are on my Discord Server all have their respective Discord ID mapped. So I am well prepared smile

Which profile do you use when you send the request to Overseerr? Do you take the default one for movies/shows that is configured in Overseerr? Or does the user need to choose it when I have multiple?
My preference would just be default profile.

As far as I can tell, I can't actually select the profile for the requests via the API, so it will always use whatever is setup in Overseerr

from doplarr.

kiranshila avatar kiranshila commented on June 14, 2024

It would be nice if checked for permission(s) as well, and reported back to the user if they don't have permission. E.g. to the profiles associated with the 4K Sonarr / Radarr instances.

What permissions are you referring to? Just 4K vs non-4K, or quota limits, or other stuff. I'm still trying to think of a nice way to do the 4K split, but it looks like that requires having two different servers up, it can't just use a different profile afaik.

from doplarr.

vp-en avatar vp-en commented on June 14, 2024

Hey @kiranshila, I'm not sure how far you are with this, but I got to think 😄
Is it possible to add an (optional) option for Doplarr to request content on both profiles (regular + 4K)?

E.g.. If one user tries to request a Movie in 4K, that it also sends the same request (same movie) to the regular sonarr/radarr as well.

Not sure if "options" are a part of Doplarr, so forgive me if this should be a in a separate GH issue.

from doplarr.

kiranshila avatar kiranshila commented on June 14, 2024

Ok I think I got it all working - if someone with an overseerr setup wants to try it out, check out the ghcr.io/kiranshila/doplarr:overseerr docker image

from doplarr.

kiranshila avatar kiranshila commented on June 14, 2024

If y'all don't find any major problems, I'm ready for the release

from doplarr.

onedr0p avatar onedr0p commented on June 14, 2024

@kiranshila it would be good to know what environment variables to set :) But go ahead and merge it. I'm sure there will be feedback after you release it.

from doplarr.

kiranshila avatar kiranshila commented on June 14, 2024

Oh sorry, it's in the readme in this branch. You just set overseerr_url and overseerr_api, just like radarr and sonarr

from doplarr.

cpt-kuesel avatar cpt-kuesel commented on June 14, 2024

I tried it and movies and tv shows work as expected.

Anime shows can't be requested, at least thats the conclusion i have come to.

Also requesting something thats already available gives the user no feedback and doesn't close the request.

from doplarr.

cpt-kuesel avatar cpt-kuesel commented on June 14, 2024

To clarify on animes:
I am able to click request and get the response has been requested, but the actual request doesnt go through

from doplarr.

vp-en avatar vp-en commented on June 14, 2024

I'm quite busy today, so I'll only be able to test it tomorrow
Edit Sorry probably won't be able to test it today either 😕

from doplarr.

kiranshila avatar kiranshila commented on June 14, 2024

@cpt-kuesel

Also requesting something thats already available gives the user no feedback and doesn't close the request.

Ah yes - forgot about that.

I am able to click request and get the response has been requested, but the actual request doesnt go through

I am unable to reproduce this. Is there any error in the log? Is your anime setup somehow different?

from doplarr.

cpt-kuesel avatar cpt-kuesel commented on June 14, 2024

I didn't see any errors in doplarr or overseerr logs unfortunately.

I don't think my anime setup is different. Both tv shows and anime are defined in the default profile for sonarr and differ only in root folder and tags.
image

from doplarr.

cpt-kuesel avatar cpt-kuesel commented on June 14, 2024

Okay so I tried a bit more and was partially successful.
I did manage to request the anime shows i couldn't request before.

And I think I know the problem.
I can only request them if choose a specific season. If i choose all seasons the request doesnt go through.

from doplarr.

kiranshila avatar kiranshila commented on June 14, 2024

When you say it doesn't go through - like the request isn't showing up at all in Overseerr?

from doplarr.

cpt-kuesel avatar cpt-kuesel commented on June 14, 2024

Correct, it never reaches Overseerr.
Not even in the overseerr logs.

from doplarr.

kiranshila avatar kiranshila commented on June 14, 2024

I think after I fix whatever is happening with @cpt-kuesel's anime and add a duplicate request message, we should be good to go

from doplarr.

vp-en avatar vp-en commented on June 14, 2024

I'm probably just an idiot, but I followed the guide quite closely, added the bot..

docker run \
-e OVERSEERR_URL='https://overseerr.xxxx.com' \
-e OVERSEERR_API='xxxxxxxxxxxxxxxxxxxxxxxxx=' \
-e BOT_TOKEN='xxxxxxxxxxxxxxxxxxxxxxxx' \
-e ROLE_ID='xxxxxxxxxxxxxxxxxxxxxxxx' \
--name doplarr ghcr.io/kiranshila/doplarr:overseerr

Getting this from the docker logs:

19:05:38,774 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback-test.xml]
19:05:38,774 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback.groovy]
19:05:38,774 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Found resource [logback.xml] at [jar:file:/app/target/Doplarr.jar!/logback.xml]
19:05:38,778 |-INFO in ch.qos.logback.core.joran.spi.ConfigurationWatchList@b0e5507 - URL [jar:file:/app/target/Doplarr.jar!/logback.xml] is not of type file
19:05:38,828 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - debug attribute not set
19:05:38,828 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - About to instantiate appender of type [ch.qos.logback.core.ConsoleAppender]
19:05:38,830 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - Naming appender as [CONSOLE]
19:05:38,863 |-WARN in ch.qos.logback.core.ConsoleAppender[CONSOLE] - This appender no longer admits a layout as a sub-component, set an encoder instead.
19:05:38,863 |-WARN in ch.qos.logback.core.ConsoleAppender[CONSOLE] - To ensure compatibility, wrapping your layout in LayoutWrappingEncoder.
19:05:38,863 |-WARN in ch.qos.logback.core.ConsoleAppender[CONSOLE] - See also http://logback.qos.ch/codes.html#layoutInsteadOfEncoder for details
19:05:38,864 |-INFO in ch.qos.logback.classic.joran.action.RootLoggerAction - Setting level of ROOT logger to ERROR
19:05:38,864 |-INFO in ch.qos.logback.core.joran.action.AppenderRefAction - Attaching appender named [CONSOLE] to Logger[ROOT]
19:05:38,864 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - End of configuration.
19:05:38,864 |-INFO in ch.qos.logback.classic.joran.JoranConfigurator@6bbe50c9 - Registering current configuration as safe fallback point

Assuming this is alright, since the bot is showing it's online.

but I have a problem - the /request options are greyed out. I double checked the permissions given to the assigned role..
The "Use Application Commands" is set to enabled both in the role and in the channel I'm trying to use..

NEVERMIND.. Forgot to read this part lol:

Every user that you wish to have access to the slash commands needs to be
assigned this role (even the server owner/admins).

from doplarr.

kiranshila avatar kiranshila commented on June 14, 2024

@vp-en Yeah, I should probably bold that or something - that seems to be the most common thing people are missing. This is an artifact of the discord slash command permissions nonsense, there isn't really a way around it.

from doplarr.

vp-en avatar vp-en commented on June 14, 2024

@vp-en Yeah, I should probably bold that or something - that seems to be the most common thing people are missing. This is an artifact of the discord slash command permissions nonsense, there isn't really a way around it.

Slightly annoying, but that's not your fault 😄 I guess I'll create some trash role for the sole purpose of the bot 👍

The requesting works very good though. Again, as you already mentioned, it would be awesome with both a "this is already on Plex", if Overseerr knows it's already on Plex, or "this has already been requested" if Overseerr already knows it has been requested, and so on.

Thanks a lot for your work on this 👍

from doplarr.

kiranshila avatar kiranshila commented on June 14, 2024

Slightly annoying, but that's not your fault smile I guess I'll create some trash role for the sole purpose of the bot +1

An alternative idea would be to make the role bit optional, if you want everyone on the server to have access to it, then we could just not use a role at all. Those are the two options the discord API has, all or nothing.

from doplarr.

vp-en avatar vp-en commented on June 14, 2024

I think assigning it to a certain part (certain group of people) of my Discord is sufficient in my case.

I'm wondering how I can limit the bot to only work in a specific channel though. Do you have any thoughts on this/ideas?

from doplarr.

vp-en avatar vp-en commented on June 14, 2024

I'm wondering how I can limit the bot to only work in a specific channel though. Do you have any thoughts on this/ideas?

It's not possible with the current slash command API, that's why we need the role.

I see, thanks again mate. You're a legend.

from doplarr.

vp-en avatar vp-en commented on June 14, 2024

Sorry to spam up this issue.. but I have this one user on Discord I tried to test this with.
I copied and added his Discord ID to his Plex profile on Overseerr, but when he's trying to request, he gets the You do not have an associated account on Overseerr message.

It works on my own user, and I just copied my own ID into my Plex profile Overseerr.

from doplarr.

kiranshila avatar kiranshila commented on June 14, 2024

Ooo interesting - I suppose I should try to add more than one user to my test setup here haha

from doplarr.

vp-en avatar vp-en commented on June 14, 2024

Edit: The user in question 👍
https://i.imgur.com/fRBQRvJ.png

from doplarr.

kiranshila avatar kiranshila commented on June 14, 2024

...uhhh haha. I'll take a look. Something is up with

(defn user-discord-id [id]
(a/go
(->> (a/<! (GET (str "/user/" id "/settings/notifications")))
(then (comp :discordId :body))
(else utils/fatal-error))))
(defn discord-users []
(a/go-loop [ids (map :id (a/<! (all-users)))
users {}]
(if (empty? ids)
users
(let [id (first ids)]
(recur (rest ids) (assoc users (a/<! (user-discord-id id)) id))))))
then

from doplarr.

kiranshila avatar kiranshila commented on June 14, 2024

This seemed a little hacky anyway, but there wasn't an obvious way to connect the overseerr user account to the discord ID

from doplarr.

kiranshila avatar kiranshila commented on June 14, 2024

@vp-en I just tried a Local User and Plex User in overseerr and have not been able to reproduce the issue.

from doplarr.

vp-en avatar vp-en commented on June 14, 2024

In my case, both of the users are imported from Plex and not local Overseerr users. Not sure if that makes any difference.
I'll test it a bit later and see if I'm able to reproduce the error over and over and then report back

Would it matter if the OVERSEERR_URL is set to a remote host? The bot and the Overseerr are not hosted on the same server yet, in my case..

Is there any settings in Overseerr that I've missed? This seems weird.

Edit: I'll try a few different things, see if anything works lol.

  • Tried creating a local user in Overseerr, removed my Discord ID from the Owner profile and put it in the local profile. Same issue, You do not have an associated account on Overseerr. So I guess it's not that.

  • Tried giving the local user Admin rights (all permissions), didn't work either

  • Only thing that seems to work is if I put the discord ID in the Owner account of the Overseerr..

This is what I've tried:
0) Launch Doplarr bot using:

docker run \
-e OVERSEERR_URL='https://overseerr.urlFromRemoteHost.com' \
-e OVERSEERR_API='OverseerrApiKey=' \
-e BOT_TOKEN='BotTokenFromDiscord' \
-e ROLE_ID='88XX504XXXX89407016' \
--name doplarr ghcr.io/kiranshila/doplarr:overseerr

The ROLE_ID is the role ID of CDR Bot in Discord. The CDR Bot role has no global permissions set, but only enabled a few permissions in one specific channel on Discord.

edited re-producing steps to actually reproduce the error:

  1. Create 12 (or more) local profiles in Overseerr, give them these permissions:
    https://i.imgur.com/5xtbHVT.png

  2. Create a new Discord account / Discord user, named dpzTEST

  3. Invite dpzTEST user to server

  4. Assign the same role as the bot (CDR Bot) to dpzTEST

  5. Copy the ID of the user dpzTEST to the 12th (or above) local profile created

  6. Press on save changes

  7. Try and request a movie using /request movie {term}

  8. Get the error message:
    You do not have an associated account on Overseerr

  9. Remove the ID from the 12th (or above) local user, that you put in (from step 5), and press Save Changes

  10. Add the ID from user dpzTEST to one of the 9 first users in Overseerr, and press Save Changes

  11. You should now be able to request from the dpzTEST user in the Discord channel.

Is there anyone else able to test this? @onedr0p @cpt-kuesel

Bonus Info, cause why not:
The Owner user in Overseerr has this URL:
https://overseerr.urlFromRemoteHost.com/profile/settings/notifications/discord

while the local user has a quite different URL, and also a unique number
https://overseerr.urlFromRemoteHost.com/users/66/settings/notifications/discord

Could that be related to the code bit from #5 (comment) ?
It seems to look for the /user/ part of the URL, and somehow, in my case, it only works with the Owner user, which has no /user/ in the URL

Bonus Info pt2
Visiting:
https://overseerr.urlFromRemoteHost.com/api/v1/user/1 shows the correct discordId of my personal Discord ID

Visiting:
https://overseerr.urlFromRemoteHost.com/api/v1/user/66 shows the correct discordId of the dpzTEST user

Bonus Info pt3
Might be a stupid assumption, but could it be that these lines

(defn all-users []
(a/go
(->> (a/<! (GET "/user"))
(then (comp :results :body))
(else utils/fatal-error))))

tries to get all users, using GET "/user" - which only gets the first 10 hits/results? The user I'm testing is at the very bottom and only visible if you run
https://overseerr.urlFromRemoteHost.com/api/v1/user?take=100

Bonus Info pt40243938
I think I fixed it, my stupid assumption seems to be somewhat correct
I changed the line

(->> (a/<! (GET "/user"))

to
(->> (a/<! (GET "/user?take=1000"))
compiled it, and now the local user now works just fine

Not sure if anyone has over 1000 users in their Overseerr, or if there's a better solution than putting a specific number

from doplarr.

cpt-kuesel avatar cpt-kuesel commented on June 14, 2024

I will try and follow your steps.
But I will probably only have time this evening. Will report back with my findings!

from doplarr.

kiranshila avatar kiranshila commented on June 14, 2024

Awesome detective work @vp-en! Nowhere in the docs could I find that the users endpoint is paged as well. The docs clearly say get "all" users.

Great find. I'll get it fixed.

from doplarr.

vp-en avatar vp-en commented on June 14, 2024

Awesome detective work @vp-en! Nowhere in the docs could I find that the users endpoint is paged as well. The docs clearly say get "all" users.

Great find. I'll get it fixed.

Yeah, thanks. Found it by doing the https://overseerr.urlremote.com/api/v1/user and only saw 10 results. Then it clicked lol.
And thanks to you too :D

Anyways, I'm not sure if I asked this - is there any way for you to implement an option, where IF a user requests some movie/series in 4K, that's not already present in non-4K, it'll request both of them?
e.g. if a user requests "Die Hard" in 4K, and it's not already present on Plex, in either 4K or not, it'll send a request to both "profiles" (4K + Non-4K)?

Edit
Ah wait think I requested it here #5 (comment) . Should I create a separate GitHub issue?

from doplarr.

kiranshila avatar kiranshila commented on June 14, 2024

Yeah I'd say make a separate issue.

@vp-en https://overseerr.urlFromRemoteHost.com/api/v1/user/66 shows the correct discordId of the dpzTEST user

This is genius. Absolutely nowhere in the API docs does it say that the user endpoint returns the discord id. That makes everything so much simpler, I don't have to do this whole get all users thing. https://api-docs.overseerr.dev/#/users/get_user__userId_

It doesn't even mention the settings block.

from doplarr.

kiranshila avatar kiranshila commented on June 14, 2024

Yeah all of that code is now

(defn discord-id [ovsr-id]
 (a/go
   (->> (a/<! (GET (str "/user/" ovsr-id)))
        (then #(s/select-one [:body :settings :discordId] %))
        (else utils/fatal-error))))

So much better.

EDIT: Wait I lied. I forgot that at this point we only have the discord id, we don't have an immediate way of mapping from discord id to overseerr id, only the other way

from doplarr.

kiranshila avatar kiranshila commented on June 14, 2024

Lol requestrr does exactly what you proposed @vp-en

https://github.com/darkalfx/requestrr/blob/7c42356bcd1855e8d4fab2f18c3d0bd854f5a720/Requestrr.WebApi/RequestrrBot/DownloadClients/Overseerr/OverseerrClient.cs#L351

from doplarr.

vp-en avatar vp-en commented on June 14, 2024

I think that's good 😄

from doplarr.

kiranshila avatar kiranshila commented on June 14, 2024

Alright, give the most recent docker image on this branch a try - should have a message on the thing being requested, and fix the number of users error.

from doplarr.

vp-en avatar vp-en commented on June 14, 2024

Sounds awesome 😁

from doplarr.

kiranshila avatar kiranshila commented on June 14, 2024

Ok whenever y'all get a chance, please give the latest build a try

from doplarr.

vp-en avatar vp-en commented on June 14, 2024

Finally had a few minutes to test it @kiranshila.

Tried the latest build as of the time of this post:
What works:

  • The error messages seem to work now!
  • If a movie already exists on Plex, it'll report it correctly: This is already available!
  • If a "regular" request is already registered in Overseerr, it'll correctly report: This is currently processing and should be available soon.
  • If a "4K" request is already registered in Overseerr, it'll correctly report: This is currently processing and should be available soon.

Issues:

  • Requesting a movie (regular profile) that's NOT present on Plex, results in nothing happening.
  • Requesting a movie (4K profile) that's NOT present on Plex, results in nothing happening.
  • Requesting a movie in 1080p, that's already present in 4K on Plex, results in nothing happening.
  • Requesting 4K on a movie that's already present in 1080p on Plex, results in nothing happening. Nothing apparent to see in logs.
  • Essentially can't request anything lol

Logs from the docker (nothing interesting I think):
https://0bin.net/paste/amJW0Tvh#1jJLbae8rfAHkdwWldo1xQqtuTR14ZFeNXDtGodjFjd

from doplarr.

vp-en avatar vp-en commented on June 14, 2024

Seems to work perfectly now 😄 I can atleast request movies now quite seamlessly.

One issue though.. In Overseerr, there's a setting called Allow Partial Series Requests.
This bot doesn't really "respect" that choice, since using /request series {term} will ask what season you want to request, and is able to circumvent this limitation set by the user in Overseerr settings.

It would be nice if the bot would check Overseerr if Allow Partial Series Requests is enabled or not:
https://i.imgur.com/7O2j0nf.png

If it's enabled, then it should be possible to request individual seasons, and if's it's disabled (not allowed) the only option should be All Seasons when requesting a series.

from doplarr.

kiranshila avatar kiranshila commented on June 14, 2024

Oh interesting - didn't even know that option existed. Should be easy enough to implement.

from doplarr.

kiranshila avatar kiranshila commented on June 14, 2024

I'm surprised Overseerr doesn't throw an error when requesting partial seasons

from doplarr.

kiranshila avatar kiranshila commented on June 14, 2024

As like a query term?

from doplarr.

vp-en avatar vp-en commented on June 14, 2024

Yeah. Ah wait nvm, it doesn't happen anymore lol

from doplarr.

kiranshila avatar kiranshila commented on June 14, 2024

Buh? Was there an error?

from doplarr.

vp-en avatar vp-en commented on June 14, 2024

Nah, not even. I must've tried on a previous version, where it happened. Now when I put in a url, nothing seems to happen, other than a "no results" message. My mistake sorry 😄

from doplarr.

vp-en avatar vp-en commented on June 14, 2024

also just tested your latest commit, it does seem to register that I've disabled the Allow Partial Series Requests and now only gives me the choice of All Seasons 👍
I don't think I have anything more to add for now lol, other than my other feature request 😉

Woops, had this happen, requesting a series in 4K
(new series requested first on regular profile - went fine - then tried Request 4K, this came up in the logs)

Exception in thread "async-dispatch-1" java.lang.NullPointerException
        at clojure.lang.Numbers.ops(Numbers.java:1068)
        at clojure.lang.Numbers.dec(Numbers.java:145)
        at doplarr.overseerr$season_status.invokeStatic(overseerr.clj:99)
        at doplarr.overseerr$season_status.doInvoke(overseerr.clj:96)
        at clojure.lang.RestFn.invoke(RestFn.java:486)
        at doplarr.interaction_state_machine$fn__19758$fn__19826$state_machine__                                                                             8301__auto____19833$fn__19835.invoke(interaction_state_machine.clj:108)
        at doplarr.interaction_state_machine$fn__19758$fn__19826$state_machine__                                                                             8301__auto____19833.invoke(interaction_state_machine.clj:102)
        at clojure.core.async.impl.ioc_macros$run_state_machine.invokeStatic(ioc                                                                             _macros.clj:978)
        at clojure.core.async.impl.ioc_macros$run_state_machine.invoke(ioc_macro                                                                             s.clj:977)
        at clojure.core.async.impl.ioc_macros$run_state_machine_wrapped.invokeSt                                                                             atic(ioc_macros.clj:982)
        at clojure.core.async.impl.ioc_macros$run_state_machine_wrapped.invoke(i                                                                             oc_macros.clj:980)
        at clojure.core.async.impl.ioc_macros$take_BANG_$fn__8319.invoke(ioc_mac                                                                             ros.clj:991)
        at clojure.core.async.impl.channels.ManyToManyChannel$fn__3152$fn__3153.                                                                             invoke(channels.clj:95)
        at clojure.lang.AFn.run(AFn.java:22)
        at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown S                                                                             ource)
        at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown                                                                              Source)
        at clojure.core.async.impl.concurrent$counted_thread_factory$reify__3055                                                                             $fn__3056.invoke(concurrent.clj:29)
        at clojure.lang.AFn.run(AFn.java:22)
        at java.base/java.lang.Thread.run(Unknown Source)
Exception in thread "async-dispatch-5" java.lang.NullPointerException
        at clojure.lang.Numbers.ops(Numbers.java:1068)
        at clojure.lang.Numbers.dec(Numbers.java:145)
        at doplarr.overseerr$season_status.invokeStatic(overseerr.clj:99)
        at doplarr.overseerr$season_status.doInvoke(overseerr.clj:96)
        at clojure.lang.RestFn.invoke(RestFn.java:486)
        at doplarr.interaction_state_machine$fn__19758$fn__19826$state_machine__                                                                             8301__auto____19833$fn__19835.invoke(interaction_state_machine.clj:108)
        at doplarr.interaction_state_machine$fn__19758$fn__19826$state_machine__                                                                             8301__auto____19833.invoke(interaction_state_machine.clj:102)
        at clojure.core.async.impl.ioc_macros$run_state_machine.invokeStatic(ioc                                                                             _macros.clj:978)
        at clojure.core.async.impl.ioc_macros$run_state_machine.invoke(ioc_macro                                                                             s.clj:977)
        at clojure.core.async.impl.ioc_macros$run_state_machine_wrapped.invokeSt                                                                             atic(ioc_macros.clj:982)
        at clojure.core.async.impl.ioc_macros$run_state_machine_wrapped.invoke(i                                                                             oc_macros.clj:980)
        at clojure.core.async.impl.ioc_macros$take_BANG_$fn__8319.invoke(ioc_mac                                                                             ros.clj:991)
        at clojure.core.async.impl.channels.ManyToManyChannel$fn__3152$fn__3153.                                                                             invoke(channels.clj:95)
        at clojure.lang.AFn.run(AFn.java:22)
        at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown S                                                                             ource)
        at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown                                                                              Source)
        at clojure.core.async.impl.concurrent$counted_thread_factory$reify__3055                                                                             $fn__3056.invoke(concurrent.clj:29)
        at clojure.lang.AFn.run(AFn.java:22)
        at java.base/java.lang.Thread.run(Unknown Source)
Exception in thread "async-dispatch-3" java.lang.NullPointerException
        at clojure.lang.Numbers.ops(Numbers.java:1068)
        at clojure.lang.Numbers.dec(Numbers.java:145)
        at doplarr.overseerr$season_status.invokeStatic(overseerr.clj:99)
        at doplarr.overseerr$season_status.doInvoke(overseerr.clj:96)
        at clojure.lang.RestFn.invoke(RestFn.java:486)
        at doplarr.interaction_state_machine$fn__19758$fn__19826$state_machine__8301__auto____19833$fn__19835.invoke(interaction_state_machine.clj:108)
        at doplarr.interaction_state_machine$fn__19758$fn__19826$state_machine__8301__auto____19833.invoke(interaction_state_machine.clj:102)
        at clojure.core.async.impl.ioc_macros$run_state_machine.invokeStatic(ioc_macros.clj:978)
        at clojure.core.async.impl.ioc_macros$run_state_machine.invoke(ioc_macros.clj:977)
        at clojure.core.async.impl.ioc_macros$run_state_machine_wrapped.invokeStatic(ioc_macros.clj:982)
        at clojure.core.async.impl.ioc_macros$run_state_machine_wrapped.invoke(ioc_macros.clj:980)
        at clojure.core.async.impl.ioc_macros$take_BANG_$fn__8319.invoke(ioc_macros.clj:991)
        at clojure.core.async.impl.channels.ManyToManyChannel$fn__3152$fn__3153.invoke(channels.clj:95)
        at clojure.lang.AFn.run(AFn.java:22)
        at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
        at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
        at clojure.core.async.impl.concurrent$counted_thread_factory$reify__3055$fn__3056.invoke(concurrent.clj:29)
        at clojure.lang.AFn.run(AFn.java:22)
        at java.base/java.lang.Thread.run(Unknown Source)

from doplarr.

kiranshila avatar kiranshila commented on June 14, 2024

Yeah I just have it skip the season selection altogether if that is set.

I broke something in the direct sonarr backend though, I'm going to fix that, go through the tests again to make sure it's all still working, then publish.

from doplarr.

kiranshila avatar kiranshila commented on June 14, 2024

Alright @vp-en I fixed that NPE

from doplarr.

vp-en avatar vp-en commented on June 14, 2024

Hey @kiranshila

Tried the latest commit as of this post

Tried requesting series again, and it says it has been requested.
But looking in Overseerr, there's nothing there.

E.g.

  • Requesting a series, The Second Husband (not present in either Sonarr or Plex)
  • Requesting it in 1080p, and afterwards in 4K
  • Nothing appears in Overseerr
  • Tried requesting it again - it says `This has been requested!.
  • Looking in Sonarr, the series is not present.

A bit different output from the logs this time:
https://0bin.net/paste/HbQjWEST#YvGXqe9O5a3Q9Ihch1KNh+dP0+k-ZitrN/j1nw7ZiCE

Tried removing the docker instance + image, and re-tried:

  • It still says the series has been requested, but still not present in either Sonarr or Overseerr
  • Tried requesting a totally different series, not present in either Sonarr, Overseerr or Plex, still says This has been requested!
  • Can you reproduce this?? Seems a bit weird to me

from doplarr.

kiranshila avatar kiranshila commented on June 14, 2024

Yeah sorry, I was messing with the build and went to bed. There is a bug in the newer 1.11.0-alpha2 clojure - going back to alpha1 fixes parts of it. Also found a bug in the finding the status of a new series. Working it now.

from doplarr.

vp-en avatar vp-en commented on June 14, 2024

Tested latest commit as of this post

Requesting seems to work, except this weird error:

  • Requesting an item gives the message Requested! immediatly followed by "This has been requested!".
  • I'm guessing the This has been requested! message means This has already been requested!
  • Happening both to regular requests and 4K requests
    Looks like this:
    https://i.imgur.com/xSqJ42P.png

from doplarr.

kiranshila avatar kiranshila commented on June 14, 2024

@vp-en That is on purpose! The Requested! message is the end of the request interaction while the This has been requested message is non-ephemeral (everyone on the channel can see it) to let everyone know something has been requested

from doplarr.

kiranshila avatar kiranshila commented on June 14, 2024

I wouldn't say short - we've been at this a while haha!

from doplarr.

vp-en avatar vp-en commented on June 14, 2024

Haha yeah true 😆

from doplarr.

kiranshila avatar kiranshila commented on June 14, 2024

@AstralDestiny Sounds like a bot permissions issue

from doplarr.

AstralDestiny avatar AstralDestiny commented on June 14, 2024

It has the Admin one that grants it all permissions so I only assume that's not an issue in the end
image

from doplarr.

kiranshila avatar kiranshila commented on June 14, 2024

@AstralDestiny I wouldn't give the bot admin - as it mentions there, that is generally not a good idea.
What matters here is the OAuth2 permissions (how you invited the bot to your server). The important ones being applications.commands and bot

You shouldn't need to give the bot any permissions from the Bot tab - those don't impact slash commands.

from doplarr.

kiranshila avatar kiranshila commented on June 14, 2024

So when you invite the bot to your server it will say something like

image

from doplarr.

AstralDestiny avatar AstralDestiny commented on June 14, 2024

I'm just laughing at myself I was blind.

from doplarr.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.