Since you didn't mentioned your discord.py version, I assume:
- It's before version 1.0:
You have pass_context=True, so Context will be passed as the first argument in the function.
async def reset(guild): # The word 'guild' is actually a Context object
The name guild is defined as Context so regardless of the name, it follows the properties of Context and not a Guild. Therefore you can still use guild and follow properties of Context but it's recommended to edit guild to context or ctx to prevent confusion.
You can also just do pass_context=False and make the guild argument to be accepted as an input via the user.
- It's after version 1.0:
The pass_context parameter is removed since then, so regardless if you use this or not, Context is always passed.
As above, you need to follow the properties of Context and use proper attributes. In your case, if you need to access id of the guild the command is invoked, you can do ctx.guild.id (ctx refers to Context object passed).
async def reset(ctx):
...
welcome.pop(str(ctx.guild.id))
...
and this will work fine.
P.S.: I'm not sure but by looking at the code, I think you have passed wrong argument (welcomereset) in the .dump() and want to pass welcome instead. Ignore this if I'm wrong :P