DenisD3D / Mc2Discord

Link your Minecraft server chat with your Discord (75k downloads)
https://modrinth.com/mod/mc2discord
Apache License 2.0
43 stars 11 forks source link

Can't change pseudo for member #79

Closed liamdemafelix closed 1 year ago

liamdemafelix commented 1 year ago

Describe the bug

Following the wiki, everything works except account linking.

Server is running Forge 1.19.4 on Ubuntu 22.04 via Pterodactyl (Java 17). Bot was invited normally using the /mc2discord invite command.

Console log:

[12:11:19] [boundedElastic-9/WARN] [mc2discord/]: Can't change pseudo for member Hasumin (IG : hsmn)
[ERROR] (boundedElastic-9) Operator called default onErrorDropped - ml.denisd3d.mc2discord.repack.reactor.core.Exceptions$ErrorCallbackNotImplemented: ml.denisd3d.mc2discord.repack.discord4j.rest.http.client.ClientException: PUT /guilds/1087323928256577628/members/489578008030740500/roles/1103901713091539036 returned 403 Forbidden with response {code=50001, message=Missing Access}
ml.denisd3d.mc2discord.repack.reactor.core.Exceptions$ErrorCallbackNotImplemented: ml.denisd3d.mc2discord.repack.discord4j.rest.http.client.ClientException: PUT /guilds/1087323928256577628/members/489578008030740500/roles/1103901713091539036 returned 403 Forbidden with response {code=50001, message=Missing Access}
Caused by: ml.denisd3d.mc2discord.repack.discord4j.rest.http.client.ClientException: PUT /guilds/1087323928256577628/members/489578008030740500/roles/1103901713091539036 returned 403 Forbidden with response {code=50001, message=Missing Access}
        at TRANSFORMER/mc2discord@3.3.1-pre/ml.denisd3d.mc2discord.repack.discord4j.rest.http.client.ClientResponse.clientException(ClientResponse.java:171)
        Suppressed: The stacktrace has been enhanced by Reactor, refer to additional information below: 
Error has been observed at the following site(s):
        *__checkpoint ⇢ Request to PUT /guilds/1087323928256577628/members/489578008030740500/roles/1103901713091539036 [RequestStream]
        *__checkpoint ⇢ Request to PUT /guilds/1087323928256577628/members/489578008030740500/roles/1103901713091539036 [DefaultRouter]
Original Stack Trace:
                at TRANSFORMER/mc2discord@3.3.1-pre/ml.denisd3d.mc2discord.repack.discord4j.rest.http.client.ClientResponse.clientException(ClientResponse.java:171)
                at TRANSFORMER/mc2discord@3.3.1-pre/ml.denisd3d.mc2discord.repack.discord4j.rest.http.client.ClientResponse.lambda$createException$13(ClientResponse.java:149)
                at TRANSFORMER/mc2discord@3.3.1-pre/ml.denisd3d.mc2discord.repack.reactor.core.publisher.MonoFlatMap$FlatMapMain.onNext(MonoFlatMap.java:125)
                at TRANSFORMER/mc2discord@3.3.1-pre/ml.denisd3d.mc2discord.repack.reactor.core.publisher.Operators$MonoSubscriber.complete(Operators.java:1839)
                at TRANSFORMER/mc2discord@3.3.1-pre/ml.denisd3d.mc2discord.repack.reactor.core.publisher.MonoFlatMap$FlatMapInner.onNext(MonoFlatMap.java:249)
                at TRANSFORMER/mc2discord@3.3.1-pre/ml.denisd3d.mc2discord.repack.reactor.core.publisher.FluxMap$MapSubscriber.onNext(FluxMap.java:122)
                at TRANSFORMER/mc2discord@3.3.1-pre/ml.denisd3d.mc2discord.repack.reactor.core.publisher.FluxHandle$HandleSubscriber.onNext(FluxHandle.java:126)
                at TRANSFORMER/mc2discord@3.3.1-pre/ml.denisd3d.mc2discord.repack.reactor.core.publisher.FluxPeekFuseable$PeekConditionalSubscriber.onNext(FluxPeekFuseable.java:854)
                at TRANSFORMER/mc2discord@3.3.1-pre/ml.denisd3d.mc2discord.repack.reactor.core.publisher.FluxPeekFuseable$PeekConditionalSubscriber.onNext(FluxPeekFuseable.java:854)
                at TRANSFORMER/mc2discord@3.3.1-pre/ml.denisd3d.mc2discord.repack.reactor.core.publisher.FluxPeekFuseable$PeekConditionalSubscriber.onNext(FluxPeekFuseable.java:854)
                at TRANSFORMER/mc2discord@3.3.1-pre/ml.denisd3d.mc2discord.repack.reactor.core.publisher.FluxMap$MapConditionalSubscriber.onNext(FluxMap.java:224)
                at TRANSFORMER/mc2discord@3.3.1-pre/ml.denisd3d.mc2discord.repack.reactor.core.publisher.FluxDoFinally$DoFinallySubscriber.onNext(FluxDoFinally.java:113)
                at TRANSFORMER/mc2discord@3.3.1-pre/ml.denisd3d.mc2discord.repack.reactor.core.publisher.FluxHandleFuseable$HandleFuseableSubscriber.onNext(FluxHandleFuseable.java:191)
                at TRANSFORMER/mc2discord@3.3.1-pre/ml.denisd3d.mc2discord.repack.reactor.core.publisher.FluxContextWrite$ContextWriteSubscriber.onNext(FluxContextWrite.java:107)
                at TRANSFORMER/mc2discord@3.3.1-pre/ml.denisd3d.mc2discord.repack.reactor.core.publisher.Operators$MonoSubscriber.complete(Operators.java:1839)
                at TRANSFORMER/mc2discord@3.3.1-pre/ml.denisd3d.mc2discord.repack.reactor.core.publisher.MonoCollectList$MonoCollectListSubscriber.onComplete(MonoCollectList.java:129)
                at TRANSFORMER/mc2discord@3.3.1-pre/ml.denisd3d.mc2discord.repack.reactor.core.publisher.FluxPeek$PeekSubscriber.onComplete(FluxPeek.java:260)
                at TRANSFORMER/mc2discord@3.3.1-pre/ml.denisd3d.mc2discord.repack.reactor.core.publisher.FluxMap$MapSubscriber.onComplete(FluxMap.java:144)
                at TRANSFORMER/mc2discord@3.3.1-pre/ml.denisd3d.mc2discord.repack.reactor.netty.channel.FluxReceive.onInboundComplete(FluxReceive.java:415)
                at TRANSFORMER/mc2discord@3.3.1-pre/ml.denisd3d.mc2discord.repack.reactor.netty.channel.ChannelOperations.onInboundComplete(ChannelOperations.java:424)
                at TRANSFORMER/mc2discord@3.3.1-pre/ml.denisd3d.mc2discord.repack.reactor.netty.channel.ChannelOperations.terminate(ChannelOperations.java:478)
                at TRANSFORMER/mc2discord@3.3.1-pre/ml.denisd3d.mc2discord.repack.reactor.netty.http.client.HttpClientOperations.onInboundNext(HttpClientOperations.java:712)
                at TRANSFORMER/mc2discord@3.3.1-pre/ml.denisd3d.mc2discord.repack.reactor.netty.channel.ChannelOperationsHandler.channelRead(ChannelOperationsHandler.java:113)
                at TRANSFORMER/mc2discord@3.3.1-pre/ml.denisd3d.mc2discord.repack.io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)
                at TRANSFORMER/mc2discord@3.3.1-pre/ml.denisd3d.mc2discord.repack.io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)
                at TRANSFORMER/mc2discord@3.3.1-pre/ml.denisd3d.mc2discord.repack.io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)
                at TRANSFORMER/mc2discord@3.3.1-pre/ml.denisd3d.mc2discord.repack.io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:103)
                at TRANSFORMER/mc2discord@3.3.1-pre/ml.denisd3d.mc2discord.repack.io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)
                at TRANSFORMER/mc2discord@3.3.1-pre/ml.denisd3d.mc2discord.repack.io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)
                at TRANSFORMER/mc2discord@3.3.1-pre/ml.denisd3d.mc2discord.repack.io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)
                at TRANSFORMER/mc2discord@3.3.1-pre/ml.denisd3d.mc2discord.repack.io.netty.channel.CombinedChannelDuplexHandler$DelegatingChannelHandlerContext.fireChannelRead(CombinedChannelDuplexHandler.java:436)
                at TRANSFORMER/mc2discord@3.3.1-pre/ml.denisd3d.mc2discord.repack.io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:324)
                at TRANSFORMER/mc2discord@3.3.1-pre/ml.denisd3d.mc2discord.repack.io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:296)
                at TRANSFORMER/mc2discord@3.3.1-pre/ml.denisd3d.mc2discord.repack.io.netty.channel.CombinedChannelDuplexHandler.channelRead(CombinedChannelDuplexHandler.java:251)
                at TRANSFORMER/mc2discord@3.3.1-pre/ml.denisd3d.mc2discord.repack.io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)
                at TRANSFORMER/mc2discord@3.3.1-pre/ml.denisd3d.mc2discord.repack.io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)
                at TRANSFORMER/mc2discord@3.3.1-pre/ml.denisd3d.mc2discord.repack.io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)
                at TRANSFORMER/mc2discord@3.3.1-pre/ml.denisd3d.mc2discord.repack.io.netty.handler.ssl.SslHandler.unwrap(SslHandler.java:1372)
                at TRANSFORMER/mc2discord@3.3.1-pre/ml.denisd3d.mc2discord.repack.io.netty.handler.ssl.SslHandler.decodeJdkCompatible(SslHandler.java:1235)
                at TRANSFORMER/mc2discord@3.3.1-pre/ml.denisd3d.mc2discord.repack.io.netty.handler.ssl.SslHandler.decode(SslHandler.java:1284)
                at TRANSFORMER/mc2discord@3.3.1-pre/ml.denisd3d.mc2discord.repack.io.netty.handler.codec.ByteToMessageDecoder.decodeRemovalReentryProtection(ByteToMessageDecoder.java:507)
                at TRANSFORMER/mc2discord@3.3.1-pre/ml.denisd3d.mc2discord.repack.io.netty.handler.codec.ByteToMessageDecoder.callDecode(ByteToMessageDecoder.java:446)
                at TRANSFORMER/mc2discord@3.3.1-pre/ml.denisd3d.mc2discord.repack.io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:276)
                at TRANSFORMER/mc2discord@3.3.1-pre/ml.denisd3d.mc2discord.repack.io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)
                at TRANSFORMER/mc2discord@3.3.1-pre/ml.denisd3d.mc2discord.repack.io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)
                at TRANSFORMER/mc2discord@3.3.1-pre/ml.denisd3d.mc2discord.repack.io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)
                at TRANSFORMER/mc2discord@3.3.1-pre/ml.denisd3d.mc2discord.repack.io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410)
                at TRANSFORMER/mc2discord@3.3.1-pre/ml.denisd3d.mc2discord.repack.io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)
                at TRANSFORMER/mc2discord@3.3.1-pre/ml.denisd3d.mc2discord.repack.io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)
                at TRANSFORMER/mc2discord@3.3.1-pre/ml.denisd3d.mc2discord.repack.io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919)
                at TRANSFORMER/mc2discord@3.3.1-pre/ml.denisd3d.mc2discord.repack.io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166)
                at TRANSFORMER/mc2discord@3.3.1-pre/ml.denisd3d.mc2discord.repack.io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:719)
                at TRANSFORMER/mc2discord@3.3.1-pre/ml.denisd3d.mc2discord.repack.io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:655)
                at TRANSFORMER/mc2discord@3.3.1-pre/ml.denisd3d.mc2discord.repack.io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:581)
                at TRANSFORMER/mc2discord@3.3.1-pre/ml.denisd3d.mc2discord.repack.io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:493)
                at TRANSFORMER/mc2discord@3.3.1-pre/ml.denisd3d.mc2discord.repack.io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:986)
                at TRANSFORMER/mc2discord@3.3.1-pre/ml.denisd3d.mc2discord.repack.io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
                at TRANSFORMER/mc2discord@3.3.1-pre/ml.denisd3d.mc2discord.repack.io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
                at java.base/java.lang.Thread.run(Thread.java:833)

Your upload command isn't working (as https://m2d.denisd3d.ml is down and upon checking it doesn't seem like I'm the only one that can't access it, it's actually down), so I'm pasting the config here without sensitive data:

# Change the language of the mod. Delete the rest of this file to translate the config. Big thanks to the translators : Morty#0273 (ru_ru), PixelVoxel#4327 (ko_kr)
# Supported language : en_us, fr_fr, ru_ru, ko_kr
lang = "en_us"

# Minecraft2Discord configuration
#  - Curseforge: https://www.curseforge.com/minecraft/mc-mods/minecraft2discord
#  - Modrinth: https://modrinth.com/mod/minecraft2discord
#  - Discord: https://discord.gg/rzzd76c
#  - Github: https://github.com/DenisD3D/Minecraft2Discord
#  - Wiki: https://github.com/DenisD3D/Minecraft2Discord/wiki
#
# Read the wiki for a quick start guide or for more advanced customization
# You can also join the discord to get some help
#
# You can use discord markdown
# Many variables are available to customize the behavior. Check them on the wiki: https://github.com/DenisD3D/Minecraft2Discord/wiki/Variables
[General]
    # Token for the bot. This is a secret string that can be generated on discord website. More info here: https://github.com/DenisD3D/Minecraft2Discord/wiki/Discord-token
    token = --redacted--

# Channels configuration. You may duplicate this block. Each one correspond to one channel
# id is the discord id of the channel. See: https://github.com/DenisD3D/Minecraft2Discord/wiki/Discord-ids
# subscriptions is an array of what type of message you want in this channel. Currently supported are: 
#   - chat (player chat message in both direction)
#   - info (join, leave, start, stop, death, advancement)
#   - command (listen to command, see Commands section)
#   - log (all the log of the server)
#   - discord_announcement (for relaying announcement channel to Discord)
# mode define how to send messages (WEBHOOK, PLAIN_TEXT or EMBED)
[Channels]

    [[Channels.Channel]]
        id = --redacted--
        subscriptions = ["info", "chat", "command"]
        mode = "WEBHOOK"

# Customize here the message that are sent on discord. To disable one, set an empty value ("")
# For the list of available variables see: https://github.com/DenisD3D/Minecraft2Discord/wiki/Variables
[Messages]
    # Global variables only
    start = "The server has started"
    # Global variables only
    stop = "The server has stopped"
    # Global variables and Player variables
    join = "${player_display_name} joined the game"
    # Global variables and Player variables
    leave = "${player_display_name} left the game"
    # Global variables, Player variables and Death variables
    death = "${death_message}"
    # Global variables, Player variables and Advancement variables
    advancement = "${player_display_name} has made the advancement ${advancement_title}. ${advancement_description}."

[Commands]
    # Prefix used before each command. Minecraft default one is '/' (eg : /help)
    prefix = "/"
    # If true, text returned by commands will be in a Discord code block
    use_codeblocks = true
    # Response when the user isn't allowed to use the command
    error = "Sorry, you're not allowed to use that command!"

    # Commands permissions configuration. You may duplicate the block. Each block correspond to one rule
    # id is an user id or a role id. The rule (current block) will apply for this user or users with this role
    # commands is a list of the commands that are allowed in addition of the permission level
    # permission_level allow all the commands with this permission or under level. -1 mean only the commands in the list commands above and 0 mean all non op commands
    # comment not used by the mod. You can use it to remember what the rule is for
    # see https://minecraft.gamepedia.com/Server.properties#op-permission-level
    [[Commands.Command]]
        id = 0
        commands = ["help"]
        permission_level = -1
        comment = ""

[Status]

    [Status.Presence]
        # Message to display under the bot in the member list on Discord
        message = " Minecraft (${online_players} online)"
        #The type of presence (PLAYING, STREAMING, LISTENING, WATCHING, COMPETING)
        type = "PLAYING"
        # Update frequency of the presence message (in seconds). A too low number might result in limitation from Discord
        update = 60
        # Only if type is STREAMING, ignored for others. Must be a valid youtube or twitch link.
        link = ""

    # Status channels configuration. You may duplicate the block. Each block correspond to one channel
    # id is the discord id of the channel. See : https://github.com/DenisD3D/Minecraft2Discord/wiki/Discord-ids
    # update_period is the update frequency of the channel (in seconds). A too low number might result in limitation form Discord (max 2 update per 10 minutes as of writing)
    # name_message is the message to set as a name of the channel. You can use Global variables. If the channel is a text channel, whitespace will be replaced by '-'
    # topic_message is the message to set as the description of the channel. You can use Global variables
    [Status.Channels]

        [[Status.Channels.Channel]]
            id = 0
            update_period = 610
            name_message = "${online_players} / ${max_players}"
            topic_message = "${online_players} / ${max_players}"

[Features]
    # Enable account linking features (use /mc2discord restart to generate the associated config). Require SERVER MEMBERS INTENT to be enabled for all features to work
    account_linking = true

[Account]
    # The id of the guild your players are on
    guild_id = --redacted--
    # If true, the member on discord will be renamed to the format in discord_pseudo_format
    rename_discord_member = true
    # The format to rename the discord member. Available variables : Player & Member
    discord_pseudo_format = "${member_name} (IG: ${player_name})"
    # The link command (you need to leave & rejoin for the command to appear in suggestion, old command will disappear after a server restart)
    link_command = "discord link"
    # The unlink command (you need to leave & rejoin for the command to appear in suggestion, old command will disappear after a server restart)
    unlink_command = "discord unlink"
    # If true, non linked players will be kick of the server at login with a link code else players will be able to link using the command
    force_link = false

    # Customize here the message that are sent
    [Account.Messages]
        # Message to give the code to the player. ${code} will be replaced by the code
        link_get_code = "To link your account please send $c!code ${code}$r to ${bot_name}#${bot_discriminator} in a private message on Discord"
        # The message sent when link is complete
        link_successful = "You have successfully linked your account"
        # The message sent when the code is wrong
        link_invalid_code = "This code is invalid"
        # The message sent when the account is already linked
        link_error_already = "Your account is already linked"
        # The message sent when the account unlinking is successful
        unlink_successful = "Your account is now unlinked"
        # The message sent when the account unlink is unsuccessful
        unlink_error = "Can't unlink your account"
        # The message sent when the account is missing some roles
        missing_roles = "You are missing some permissions or roles on Discord needed for Account Linking"

    # Set here some requirements to link accounts: required_roles_id is an array of role id required to make the link & roles_id_to_give is an array of role id that will be given on the link. You may create multiple block
    [[Account.Policy]]
        required_roles_id = [--redacted--]
        roles_id_to_give = [--redacted--]

# Style configuration
[Style]
    # Override the bot name in webhook mode. You may use global variable here
    bot_name = ""
    # Override the bot avatar in webhook mode. Must be a valid an url. You may use global variable here
    bot_avatar = ""
    # Url to fetch player avatar from. Must be a valid url and not empty. You may use Global variables and Player variables here
    avatar_api = "https://mc-heads.net/head/${player_uuid}/right"
    # Format for the messages sent in the minecraft chat. You may use Global variables, Member variables and Message variable here. You may change the color with '${color_start_COLOR} CONTENT ${color_end}' where COLOR is a hex color or 'top_role' for discord highest role color. ${reply} will be replaced with reply_format if the message has a referenced message.
    minecraft_chat_format = "${color_start_#ffff00}<Discord - ${color_end}${color_start_top_role}${member_nickname}${color_end}${color_start_#ffff00}>${color_end} ${message}"
    # Format for chat messages sent in discord when webhook mode is turned to false. You may use Global variables, Player variables and Message variable here
    discord_chat_format = "**${player_display_name}**: ${message}"
    # Replace ${reply} in minecraft_chat_format if the message has a referenced message. You may use Global variables and Member (author of the referenced message) variables here.
    reply_format = "Replying to ${member_nickname}: "
    # If true, the server avatar will be shown in the embed for info messages
    embed_show_server_avatar = false

    [Style.embed_color]
        # Color for the embeds. A int color or one of https://github.com/DenisD3D/Mc2Discord/blob/main/mc2discord-core/src/main/java/ml/denisd3d/mc2discord/core/M2DUtils.java#L102-L134
        info = "SUMMER_SKY"
        chat = "MEDIUM_SEA_GREEN"
        command = "MEDIUM_SEA_GREEN"
        log = "SUMMER_SKY"

# The rest of the settings
[Misc]
    # Define if other bots messages must be sent in the minecraft chat
    relay_bot_messages = false
    # Define if /say & /me command must be relayed on Discord
    relay_say_me_tellraw_command = true
    # List of allowed mention type. Supported value : "EVERYONE_AND_HERE", "ROLE", "USER"
    # Eg : ["ROLE", "USER"] to allow all mention except @everyone & @here
    allowed_mention = []
    # Message for the /discord command
    discord_text = "Invitation link not set"
    # Link for the /discord command
    discord_link = "https://discord.gg/"
    # Format for forwarding the log on Discord
    logs_format = "[${log_time!HH:mm:ss}] [${log_thread_name}/${log_level}] [${log_logger_name}]: ${log_message}"
    # Level for the log on Discord (FATAL, ERROR, WARN, INFO, DEBUG, TRACE, ALL)
    logs_level = "INFO"
    # List of class to prevent from being sent to discord. You may use a package or a fully qualified class name. Eg: ["net.minecraft", "com.asupermod.somepackage.AClassToBan"]
    banned_mods_messages = []

Your config file

N/A

DenisD3D commented 1 year ago

You need to add the permission to manage role to your bot